矢量的點乘:(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ø
叉乘有什么用呢?最常見的應用就是計算垂直與一個平面、三角形的矢量。另外,還可以用於判斷三角面片的朝向。