Cross 向量叉积

向量

向量v=[x,y,z]\vec{v} = [x, y, z]表示三维空间中一个有长度的方向,单位长度为11

也写作:

v=x×i+y×j+z×k\vec{v} = x \times \vec{i} + y \times \vec{j} + z \times \vec{k}

其中i,j,k\vec{i}, \vec{j}, \vec{k}x,y,zx, y, z三个轴上的单位向量,平面中的向量可以视为zz轴长度为00的三维空间中一种特殊的向量,一般写作:

v=x×i+y×j\vec{v} = x \times \vec{i} + y \times \vec{j}

点积

向量的点积计算方式如下:

v1v2=x1×x2+y1×y2+z1×z2\vec{v_{1}} \cdot \vec{v_{2}} = x_{1} \times x_{2} + y_{1} \times y_{2} + z_{1} \times z_{2}

两个向量的点积结果是一个数字。

叉积

向量的叉积计算方式如下:

v1×v2=ijkx1y1z1x2y2z2\vec{v_{1}} \times \vec{v_{2}} = \begin{vmatrix} \vec{i} & \vec{j} & \vec{k} \\ x_{1} & y_{1} & z_{1} \\ x_{2} & y_{2} & z_{2} \end{vmatrix}

叉积的结果是一个向量,此向量遵循右手法则,将右手四指卷起大拇指伸出。从v1\vec{v_{1}}沿着四根卷起的手指指向v2\vec{v_{2}},叉积结果向量与大拇指方向相同,与v1\vec{v_{1}}v2\vec{v_{2}}所在平面垂直。

也可以写作:

v1×v2=nv1v2sinθ\vec{v_{1}} \times \vec{v_{2}} = \vec{n} \lvert \vec{v_{1}} \rvert \cdot \lvert \vec{v_{2}} \rvert sin \theta

其中n\vec{n}即为右手法则中大拇指的方向向量,长度为11θ\theta为从v1\vec{v_{1}}转向v2\vec{v_{2}}的转角(0θ1800^{\circ} \leq \theta \leq 180^{\circ})。

行列式计算公式

二阶行列式:

abcd=adbc\begin{vmatrix} a & b \\ c & d \end{vmatrix} = a \cdot d - b \cdot c

三阶行列式:

abcdefghi=aei+bfg+cdhcegafhbdi\begin{vmatrix} a & b & c \\ d & e & f \\ g & h & i \end{vmatrix} = a \cdot e \cdot i + b \cdot f \cdot g + c \cdot d \cdot h - c \cdot e \cdot g - a \cdot f \cdot h - b \cdot d \cdot i

根据上式可知,三维空间中向量叉积为:

v1×v2=(y1z2y2z1)i(x1z2x2z1)j+(x1y2x2y1)k\vec{v_{1}} \times \vec{v_{2}} = (y_{1} \cdot z_{2} - y_{2} \cdot z_{1}) \cdot \vec{i} - (x_{1} \cdot z_{2} - x_{2} \cdot z_{1}) \cdot \vec{j} + (x_{1} \cdot y_{2} - x_{2} \cdot y_{1}) \cdot \vec{k}

二维平面中向量叉积为:

v1×v2=(x1y2x2y1)k\vec{v_{1}} \times \vec{v_{2}} = (x_{1} \cdot y_{2} - x_{2} y_{1}) \cdot \vec{k}

向量夹角

计算两个向量v1\vec{v_{1}}v2\vec{v_{2}}的夹角时,我们一般将它们看作其共同的垂直方向向量长度为00,叉积C=v1×v2=x1y2x2y1C = \vec{v_{1}} \times \vec{v_{2}} = x_{1} \cdot y_{2} - x_{2} \cdot y_{1}的结果。

(1)(1)C>0C \gt 0v2\vec{v_{2}}v1\vec{v_{1}}的逆时针方向(按右手螺旋法则从v1\vec{v_{1}}旋转到v2\vec{v_{2}}时,大拇指与单位向量k\vec{k}方向相同);

(2)(2)C<0C \lt 0v2\vec{v_{2}}v1\vec{v_{1}}的顺时针方向(按右手螺旋法则从v1\vec{v_{1}}旋转到v2\vec{v_{2}}时,大拇指与单位向量k\vec{k}方向相反);

(3)(3)C=0C = 0v1\vec{v_{1}}v2\vec{v_{2}}共线,这属于边界情况;

需要注意叉积的正负值与向量间顺时针逆时针的关系,很容易搞混。

计算向量叉积的时间复杂度为O(1)O(1)

数学复习全书(李永乐李正元考研数学 数学一)

源码

Cross.h

Cross.cpp

测试

CrossTest.cpp

Last updated