Cross product

叉乘只在三维中有定义,两个向量的叉乘可以产生一个与这两个向量都垂直的新向量。例如计算一个物体表面的法向量

叉乘定义

a×b=absin(θ)n

其中θ表示a向量和b向量之间的夹角,而 n则是一个与ab所构成的平面垂直的单位向量,方向由右手定则决定 (https://zh.wikipedia.org/wiki/叉积)

模长计算

a×b=absin(θ)

模长等于以两个向量为边的平行四边形的面积

叉乘计算

Part1
叉乘计算规则:如果两个向量一样,叉乘结果为0
通过引入单位向量,向量就可以转化成代数形式,例如

a=a1i+a2j+a3k,  b=b1i+b2j+b3k

ijk是三个相互垂直的向量。它们刚好可以构成一个坐标系。这三个向量就是

i=(1,0,0), j=(0,1,0), k=(0,0,1)

Part2

a=(a1,a2,a3),b=(b1,b2,b3)

分别为两三维向量,叉乘为

a×b= <a2b3a3b2,  a3b1a1b3,  a1b2a2b1>

也可以写成伪行列式的形式equation_and_determinant

a×b=(ijka1a2a3b1b2b3)=i(a2b3a3b2)+j(a3b1a1b3)+k(a1b2a2b1)a×b=(a2b3a3b2a3b1a1b3a1b2a2b1)

Part3
先以二维为例,假设有一个向量a=(a1,a2)然后我们引入反对称矩阵

H=(0110)

然后计算

aHaT

得结果为

(a1a2)(0110)(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=(000001010) H2=(001000100) H3=(010100000)

最后将变换合并起来就是

H=(011101110)

则最终有

aH=(0a3a2a30a1a2a10)a×b=Ab=(0a3a2a30a1a2a10)(b1b2b3)

Part4
根据内积和外积的定义 dot_product

(a×b)a=<a2b3a3b2,  a3b1a1b3,  a1b2a2b1>a= a1(a2b3a3b2)+a2(a3b1a1b3)+a3(a1b2a2b1)=a1a2b3a1a3b2+a2a3b1a2a1b3+a3a1b2a3a2b1=0

假设有两个不共线的向量,分别为(a1,a2,a3),(b1,b2,b3),我们设我们要找的垂直于这两个向量的向量为(x,y,z),那么我们则有如下方程

(a1a2a3b1b2b3)(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)×b1a1(2)

y=a1b3a3b1a2b1a1b2

x=a3b2a2b3a2b1a1b2

因此所求向量为

(a3b2a2b3a2b1a1b2, a1b3a3b1a2b1a1b2, 1)

改变一下形式我们有

(a3b2a2b3, a1b3a3b1, a2b1a1b2)

这个形式与之前的形式相差了一个号,还有另外一种解法使用(2)×a1b1(1)所得的结果的形式与之前的形式相同

补充(https://github.com/Krasjet/quaternion/blob/master/quaternion.pdf)


  1. For math render, use \begin{cases} instead of \left { that doesn't supported. Or use \left ( with end of \right. ↩︎