【GAMES101】线代基础应用
点积与叉积在图形学的简单应用
点积(Dot Product)
高中我们都学过点积的几何定义(这里需注意\hat a 表示方向和\vec{a}相同的单位向量 ):
以及在坐标系中的代数定义 :
注意,点积没有结合律,也就是说点积是只存在于两个向量之间的运算。不能随意结合
那么点积在图形学中有哪些具体应用呢?下面举几个最简单的例子来建立概念
衡量两个向量方向有多接近: \vec{a} \cdot \vec{b}的结果越大,表示两个向量方向越接近
计算两个向量的夹角
Projection:计算向量间的投影:
Decompose:在上述投影的基础上,分解一个向量为多个向量的和
通过点积判断两个向量是否"大体上"同向,假设通过 \vec{a}定义了“前方”,可以通过计算与\vec{a}的点积判断另一个向量是向前还是向后(forward or backward)
叉积(Cross Product)
简单复习叉积的基本概念:
叉积的方向由右手定则决定,用右手比出点赞的手势,保证四根手指旋转的方向先经过 \vec{a}再经过 \vec{b},拇指所指的方向就是叉积的方向
由此注意到两个很重要的性质:
很显然叉积不满足交换律,右手定则中就强调了这一点
叉积的方向是两个向量组成平面的法向量
尤其是上述第二点性质,在图形学中非常有用!
判断向量是在"左边"还是"右边":
显然,如果 \vec{a} \times \vec{b}的结果为正向,则\vec{b}位于\vec{a}的左边
由上面的结论进一步拓展,我们可以观察一个点是否位于某个多边形内部
如果AP位于AB的左边,BP位于BC的左边,CA位于CP的左边,那么显然P一定位于三角形ABC的内部
这里有个有意思的问题:如果这个三角形的方向从逆时针换成顺时针,上述结论不就失效了吗?
于是进一步拓展:如果AB与AP的叉积,BC与BP的叉积,CA与CP的叉积,这三个结果同号,那么P位于三角形内部
上述结论适用于任何多边形叉积还可以用于建立坐标系(Coordinate systems),给定三维坐标系的两个轴,利用叉积可找到右手系的第三个轴