通俗理解三维向量的点乘和叉乘

一般接触得比较多的是二维向量的点乘和叉乘,但是做到与三维几何相关的工作的时候,三维向量的知识是必不可少的。

注意:三维向量和三维矢量是同一个东西,都是来自英文单词的Vector的中文翻译,只是翻译不同而已。

解释三维向量

三维向量(x ,y ,z)比二维向量(x ,y)多一维,三维向量体现在空间上,二位向量体现在平面上。

向量示意图
不管二维还是三维向量,都来自两个坐标点,如上图中的A、B两个点,三维向量来自两个空间坐标点。

通过两个坐标点相减才能得到,例如上图向量BA = A - B (由B出发指向A,向量具有方向性)。

那么如果只给出一个坐标点,不给出两个坐标点,怎么得到向量呢——其实就是一个从原点(0 , 0, 0)出发指向坐标点的一个向量,例如点P的坐标是(1 ,2, 3),那么向量OP就是(1, 2, 3),虽然从数值上是一模一样,但是含义上是有区别的,比如向量PO变成了(-1, -2, -3)。

实际上,不管多少维,本质都是向量,计算法则都是相通的。只是二维和三维向量可以具体化到平面和三维空间上去理解,更高的维度只能抽象地去计算了。


三维向量叉乘

以上都是中学的知识了,作为回顾理解。

要说三维向量的叉乘,就先说我们在什么应用场景会用到:

最常用最经典的用处之一就是计算法向量(在三维空间中垂直平面的向量就命名为法向量)。法向量在图形渲染和几何处理等方面都有重要的用途。

在这里插入图片描述

就说最简单的,请看上图左,三维空间坐标系的原点O (0 ,0 ,0), X轴的向量是X (1, 0, 0),Y轴的向量是(0 , 1, 0)。向量OX和向量OY放一起看就像是两条边决定了一个平面,这个平面就是XOY平面,现在要求用向量OX和向量OY求出法向量是什么

这个问题我们一眼看出法向量就是(0 ,0 ,1)就是OZ。

那上图右呢? 知道两个红色的向量,怎么才能算出蓝色的那个法向量呢?

答案就是直接用两个向量做叉乘
法向量N = 向量OA X 向量OB

直接可以说两向量叉乘的结果就是法向量。

那么算出的结果为什么是朝上呢,不是朝下呢?

那就要知道叉乘其实就是右手法则,如下图(图片来自网络)
在这里插入图片描述

右手握拳的方向就是左边叉乘右边的方向。

向量OX 叉乘 向量OY 得到向量OZ (0, 0, 1)就是朝上的。而向量OY 叉乘 向量OX 得到向量(0 ,0, -1)就是朝下的。

那么计算公式是就是:
法向量OC =
向量OA (x1, y1, z1) 叉乘 向量 OB (x2, y2, z2) =
( y1 * z2 - y2 *z1 , x2 * z1 - z2 * x1 , x1 * y2 - x2 * y1 )

**运算结果还是一个向量。**本质上就是一系列加法和乘法的组合,可以理解为我们将这一套计算命名为叉乘,用运算符号 X 表示。

其实这个公式来自于矩阵计算的展开,公式就是直接套就完事了。

注意:为了方便理解,上面举的例子都是两向量拥有同一个起点,如果两个向量是分开的,叉乘的结果同样是他们的法向量,直接套公式计算就行了。

一句话总结: 两向量叉乘的结果就是他们的法向量,遵循右手法则。


三维向量的点乘

同样先说我们在什么场景下会用到点乘:

我们有两个三维平面,想知道这两个平面的夹角是多少,从而就能大约知道两个平面的弯曲程度,我们想到的方法就是求出两个平面的法向量,再计算两个法向量之间的夹角。
在这里插入图片描述

现在我们只用利用叉乘就能求出两个平面的法向量了,那接下来要怎么才能算出两个法向量的夹角呢?

答案是利用两个向量的点乘。

我们先来看看点乘长什么样:
法向量N1 (x1, y1, z1) · 法向量N2 (x2, y2, z2) =
x1 * x2 + y1* y2 + z1 * z2

运算结果是一个数值。 其实本质上又是一系列加法和乘法的组合嘛,可以理解为我们将这一套计算命名为点乘,用符号 · 表示。

那上面的计算也看不出夹角啊?

其实向量N1和向量N2点乘的结果也等于 |N1| * |N2| * cosθ 。其中|N1|是指向量N1的长度,|N2|是指向量N2的长度,cosθ中的角度θ正是两个向量的夹角。那么结果呼之欲出了:

x1 * x2 + y1* y2 + z1 * z2 = |N1| * |N2| * cosθ

未知数只有θ一个,交换一下运算顺序就是

θ = arccos( N1 · N2 / |N1| * |N2| )

点乘也就是一套公式,我们只要记住,利用这套公式,我们可以求出两个向量的夹角。

另外,我们再看看N1 · N2 = |N1| * |N2| * cosθ,似乎可以有更多的理解空间:(下图来源网络)

在这里插入图片描述

cosθ是三角形的 邻边/斜边,那么把|N2| 想象成是一条三角形的斜边, |N2| * cosθ的计算结果,就是向量N2在向量N1上的投影长度。而|N1| * cosθ的计算结果,就是向量N1在向量N2上的投影长度,因为θ是他们两个向量的夹角。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐