叉乘只在三维中有定义,两个向量的叉乘可以产生一个与这两个向量都垂直的新向量。例如计算一个物体表面的法向量
叉乘定义
a×b=∥a∥∥b∥sin(θ)n
其中θ表示a向量和b向量之间的夹角,而 n则是一个与a、b所构成的平面垂直的单位向量,方向由右手定则决定 (https://zh.wikipedia.org/wiki/%E5%8F%89%E7%A7%AF)
模长计算
∥a×b∥=∥a∥∥b∥sin(θ)
模长等于以两个向量为边的平行四边形的面积
叉乘计算
Part1
叉乘计算规则:如果两个向量一样,叉乘结果为0
通过引入单位向量,向量就可以转化成代数形式,例如
a=a1i+a2j+a3k, b=b1i+b2j+b3k
i,j,k是三个相互垂直的向量。它们刚好可以构成一个坐标系。这三个向量就是
i=(1,0,0), j=(0,1,0), k=(0,0,1)
Part2
a=(a1,a2,a3),b=(b1,b2,b3)
分别为两三维向量,叉乘为
a×b= <a2b3−a3b2, a3b1−a1b3, a1b2−a2b1>
也可以写成伪行列式的形式equation_and_determinant
a×b=ia1b1ja2b2ka3b3=i(a2b3−a3b2)+j(a3b1−a1b3)+k(a1b2−a2b1)
a×b=a2b3−a3b2a3b1−a1b3a1b2−a2b1
Part3
先以二维为例,假设有一个向量a=(a1,a2)然后我们引入反对称矩阵
H=(01−10)
然后计算
aHaT
得结果为
(a1a2)(01−10)(a1a2)=(a1a2)(−a2a1)=(a1(−a2)+a2a1)=0
由叉乘的规则我们有
a×a=[a]×∗a=0
其中[a]×表示某个叉乘矩阵,然后作用到了a得结果为0,通过对比,我们可以发现,aH就是向量a的叉乘矩阵,当a为列向量时,aTH为a向量的叉乘矩阵,如果向量a=(a1,a2,a3)为三维向量,那么H为
H=H1H2H3 H1=0000010−10 H2=00−1000100 H3=010−100000
最后将变换合并起来就是
H=01−1−1011−10
则最终有
aH=0a3−a2−a30a1a2−a10
a×b=A∗b=0a3−a2−a30a1a2−a10b1b2b3
Part4
根据内积和外积的定义 dot_product
(a×b)⋅a=<a2b3−a3b2, a3b1−a1b3, a1b2−a2b1>⋅a= a1(a2b3−a3b2)+a2(a3b1−a1b3)+a3(a1b2−a2b1)
=a1a2b3−a1a3b2+a2a3b1−a2a1b3+a3a1b2−a3a2b1=0
假设有两个不共线的向量,分别为(a1,a2,a3),(b1,b2,b3),我们设我们要找的垂直于这两个向量的向量为(x,y,z),那么我们则有如下方程
(a1b1a2b2a3b3)xyz=(00)=0
⇒(a1x+a2y+a3z=0b1x+b2y+b3z=0
There is a footnote here 1
(这里可以看做向量(a1,a2,a3)和(b1,b2,b3)分别与要求向量(x,y,z)的点乘,如果垂直点乘结果为0) 令式子中的z=1,则我们有
(a1x+a2y=−a3(1)b1x+b2y=−b3(2)
因为我们的方程组的秩小于未知数的个数,这里不妨设z=1然后再求解)
然后解二元一次方程,另(1)×a1b1−(2)得
y=a2b1−a1b2a1b3−a3b1
与
x=a2b1−a1b2a3b2−a2b3
因此所求向量为
(a2b1−a1b2a3b2−a2b3, a2b1−a1b2a1b3−a3b1, 1)
改变一下形式我们有
(a3b2−a2b3, a1b3−a3b1, a2b1−a1b2)
这个形式与之前的形式相差了一个−号,还有另外一种解法使用(2)×b1a1−(1)所得的结果的形式与之前的形式相同
补充(https://github.com/Krasjet/quaternion/blob/master/quaternion.pdf)
- 叉乘的定义在历史顺序上来说是从Graßmann积中导出