矢量的点乘:(a,b,c) • (x,y,z) = ax + by + cz
矢量点乘的结果是标量,其其中之一的几何意义就是投影(projection)。
同时,点乘可以让我们了解两个矢量的方向关系,是相反,或者同向。
假设,有一个单位矢量a和一个不限长度的矢量b,现在,我们希望得到b在平行于a的一条直线上的投影,那么,我们就可以用点乘a•b来得到b在a方向上有符号的投影。如下图:
关于为什么是投影的推导过程:https://blog.csdn.net/u012419410/article/details/41865119
投影的值可能是负数,如下图:
如果a不是一个单位矢量呢?这很容易想到,任何两个矢量的点乘a•b等同于b在a方向上的投影值,再乘以a的长度。
点乘的公式:1、a•b = axbx + ayby +azbz
2、a•b = |a||b|cosø
点乘的性质:1、(ka)•b = a•(kb) = k(a•b)
2、a•(b+c) = a•b + a•c
3、v•v = vxvx + vyvy + vzvz = |v|^2
关于公式2,Unity+Shader入门精要书中,以投影的结论来反推出这个公式,但其实在推导投影的过程中,也用到了这个公式,所以书中的推导有些问题(如有误请直接指出,谢谢!)。
矢量的叉乘:也称为外积,与点乘不同的是,叉乘的结果是一个矢量,而非标量。
其中,a x b = (ax,ay,az) x (bx,by,bz) = (aybz - azby , azbx - axbz, axby - aybx)
|a x b| = |a||b|sinø
叉乘有什么用呢?最常见的应用就是计算垂直与一个平面、三角形的矢量。另外,还可以用于判断三角面片的朝向。