向量点乘与叉乘
在几何开发中,如何能够了解几何相关的知识,可以帮助我们快速解决问题,减少对现有 SDK 的依赖。本文总结了向量点乘和叉乘的区别及一些应用场景。
点乘(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 \]
点乘又叫内积、数量积、投影积
特点
交换律
\(\vec a \cdot \vec b = \vec b \cdot \vec a\)
分布律
\(\vec a \cdot (\vec b + \vec c) = \vec a \cdot \vec b + \vec a \cdot \vec c\)
双线性
\(\vec a \cdot (\gamma \vec b + \vec c) = \gamma(\vec a \cdot \vec b) +(\vec a \cdot \vec c)\)
标量相乘
\((c_1\vec a)\cdot (c_2\vec b)=c_1c_2(\vec a \cdot \vec b)\)
不满足结合律
\(\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\),从上式中可以看出,向量内积不满足结合律。
正交性
当两个非零向量垂直时,它们的内积为 0。
不满足消除律
在代数中,当 \(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\)
乘积律
当向量 \(\vec a\) 和 \(\vec b\) 可微,则有 \((\vec a \cdot \vec b)^{'}=\vec a ^{'} \cdot \vec b + \vec a \cdot \vec b ^{'}\)
实际应用
判断两个向量是否垂直
内积为 0
判断两个向量同向还是反向
同向内积为下,返回为负
用于求两个向量的夹角
\(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 \]
混合积
向量的混合积代表以这三个向量为边的六面体的体积。 \[ \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} \]