向量点乘与叉乘

在几何开发中,如何能够了解几何相关的知识,可以帮助我们快速解决问题,减少对现有 SDK 的依赖。本文总结了向量点乘和叉乘的区别及一些应用场景。

点乘(Dot Product)

定义

Dot_Product

从代数上讲,点积是两个数列中对应项的乘积的和。

假设有两个向量 \(\vec{a}=[a_1,a_2,...,a_n]\)\(\vec{b}=[b_1,b2,...,b_n]\),则有 \[ \vec{a} \cdot \vec{b} = \sum_{i=1}^n{a_ib_i}=a_1b_1+a_2b_2+...+a_nb_n \] 从几何上讲,它是两个向量在欧几里空间里的长度值和它们夹角的余弦值的乘积。 \[ \vec a \cdot \vec b = |\vec a|\cdot |\vec b| cos \theta \]

点乘又叫内积、数量积、投影积

特点

  1. 交换律

    \(\vec a \cdot \vec b = \vec b \cdot \vec a\)

  2. 分布律

    \(\vec a \cdot (\vec b + \vec c) = \vec a \cdot \vec b + \vec a \cdot \vec c\)

  3. 双线性

    \(\vec a \cdot (\gamma \vec b + \vec c) = \gamma(\vec a \cdot \vec b) +(\vec a \cdot \vec c)\)

  4. 标量相乘

    \((c_1\vec a)\cdot (c_2\vec b)=c_1c_2(\vec a \cdot \vec b)\)

  5. 不满足结合律

    \(\vec a \cdot (\vec b \vec c) \neq (\vec a \vec b)\cdot \vec c \iff \vec a \cdot \gamma \neq \beta \cdot \vec c\)

    由于向量 \(\vec a \neq \vec c\),从上式中可以看出,向量内积不满足结合律。

  6. 正交性

    当两个非零向量垂直时,它们的内积为 0。

  7. 不满足消除律

    在代数中,当 \(a\cdot b = a \cdot c\) 时,一定有 \(b=c\),但是在向量中不满足这个规律。

    \(\vec a \cdot \vec b = \vec a \cdot \vec c\)\(\vec a \neq \vec 0\) 时,通过分布律有 \(\vec a \cdot (\vec b- \vec c) = 0\),只需要满足 \(\vec a\) 垂直于 \(\vec b - \vec c\) 即可,而不一定非要求 \(\vec b - \vec c = \vec 0\)

  8. 乘积律

    当向量 \(\vec a\)\(\vec b\) 可微,则有 \((\vec a \cdot \vec b)^{'}=\vec a ^{'} \cdot \vec b + \vec a \cdot \vec b ^{'}\)

实际应用

  1. 判断两个向量是否垂直

    内积为 0

  2. 判断两个向量同向还是反向

    同向内积为下,返回为负

  3. 用于求两个向量的夹角

    \(cos \theta = \frac{\vec a \cdot \vec b}{|\vec a|\cdot |\vec b|}\)

叉乘(Cross Product)

定义

假设有两个向量 \(\vec a\)\(\vec b\),它们的叉乘表达如下: \[ \vec a \times \vec b = |\vec a| \cdot |\vec b| \cdot sin \theta \cdot \vec n \]

  • \(\theta\) 是两个向量的夹角

  • \(\vec n\) 是同时包含向量 \(\vec a\)\(\vec b\) 的平面的单位法向量

  • 当两个向量平行时,其值为 \(\vec 0\)

  • 向量的叉乘满足右手定律

叉乘又叫外积

几何意义

两个向量叉乘的模代表分别以两个向量为边的四边形的面积。 \[ S= |\vec a \times \vec b | = |\vec a|\cdot |\vec b| \cdot sin \theta \] Cross_product_parallelogram

混合积

向量的混合积代表以这三个向量为边的六面体的体积。 \[ \begin{align} \vec a \cdot (\vec b \times \vec c) = b \cdot (\vec c \times \vec a) = c \cdot (\vec a \times \vec b) \\ V= |\vec a \cdot (\vec b \times \vec c)| \end{align} \] Parallelepiped_volume

参考

  1. Dot product-wiku
  2. Cross product
  3. 点乘和叉乘的区别是什么