因為內容都不多,所以把變換 與平面、射線 合在一起說。
變換包含:平移、旋轉和縮放。
我們可以對座標進行所有的三種變換操作;
而對於向量,則只能做 旋轉 和 縮放,因為向量不包含位置資訊,所以對他做平移變化是無意義的。
每一種變換,都有對應的變換矩陣,用向量或座標乘以變換矩陣,即可對它們完成變換。
變換矩陣之間,也可以做乘法疊加,疊加的幾何意義是把變換按疊加的先後順序複合到一個矩陣中去,注意矩陣疊加不滿足交換律。
變換矩陣是一個4 x 4的矩陣,所以向量和座標需要擴充到齊次空間中。
向量:(x, y, z, 0)
座標:(x, y, z, 1)
他們的區別在於第四項,向量的第4項取0,可以使矩陣的平移變換失效,而不影響旋轉和縮放運算。
座標第4項取1,使平移有效,並且平移變換的比例不會被變化。如果取2,則其平移的距離則是矩陣中定義的2倍。以此類推。
注意,在變換後,有可能出現第4項非0/1 的情況,這個時候,我們必須要做一個映射動作,將它從齊次空間映射回3維空間,方法很簡單:
(x, y, z, w) --> (x/w, y/w, z/w, w/w) --> (x/w, y/w, z/w, 1) --> (x/w, y/w, z/w)
具體的變換矩陣就不寫出來了,很容易找到。矩陣運算,請參考《線性代數》。
-------------------------------------------------------------------------------------------------------------
平面:
設空間中有向量 P0,則 (P - P0) 就形成了一條屬於某個平面的新的向量。即定義了以(P - P0)為軸,穿過這個軸的所有平面。那麼,要確定在這眾多平面中某一個特定平面,則需要再確定一個垂直於這個平面的向量 (法向量) n,即有n Dot (P - P0) = 0,這樣就定義出了一個平面。
其中,法線向量通常要做正常化運算。且,n 和 P0都是確定的,所以,平面可定義為:
n Dot P - n Dot P0 = 0, 令 d = - n Dot P0,則有:
n Dot P + d = 0
相關的判斷:
n Dot P + d = X;
若 X<0, 點P位於平面的背面,|X| 即點P到平面的距離
若 X>0, 點P位於平面的正面,|X| 為點P到平面的距離
這兩點,很容易證明,就不再詳細寫了。
------------------------------------------------------------------------------------------------------------
射線:
設起點為 P0, 方向為 u, t 為參數,t 屬於 [0, 無窮大),當t 屬於(-無窮大, +無窮大)時就表示直線。
p(t) = p0 + t * u
可以再根據平面和射線的定義,推匯出平面與射線相交的方程。
因為推導很簡單,就不寫了