此文是 齊次座標與二維圖形基本幾何變換的矩陣推導 的衍生。理解二維的變換就能輕鬆推導三維的。
三維圖形基本幾何變換#
描述從點 (x, y, z) 到 (x + dx, y+ dy, z + dz)
引入齊次座標,可表述為 (x, y, z, 1) 變形推導為 (x + dx, y+ dy, z + dz, 1)
已知:
a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44xyz1=x+dxy+dyz+dz1
得
⎩⎨⎧a11x+a12y+a13z+a14=x+dxa21x+a22y+a23z+a24=y+dya31x+a32y+a33z+a34=z+dza41x+a42y+a43z+a44=1
解得
100001000010dxdydz1
描述從點 (x, y, z) 到 (sx*x, sy*y, sz*z),sx sy sz 為常量。
引入齊次座標,可表述為 (x, y, z, 1) 變形推導為 (sx*x, sy*y, sz*z, 1)
已知:
a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44xyz1=sx∗xsy∗ysz∗z1
得
⎩⎨⎧a11x+a12y+a13z+a14=sx∗xa21x+a22y+a23z+a24=sy∗ya31x+a32y+a33z+a34=sz∗za41x+a42y+a43z+a44=1
解得
sx0000sy0000sz00001
對於三維的旋轉可以分解為三個矩陣(繞 x 軸旋轉、繞 y 軸旋轉、繞 z 軸旋轉)的乘積
繞 z 軸旋轉 —— Rz(β)#
還記得我們對二維旋轉的推導嗎?我們在 x, y 軸構成的平面上進行旋轉時其實也可以視為是在繞著 z 軸的旋轉。那麼其三維的旋轉其實就很好理解了,無非就是增加一個固定不變的維度罷了。
即:
a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44xyz1=xcosβ−ysinβycosβ+xsinβz1
得:
⎩⎨⎧a11x+a12y+a13z+a14=xcosβ−ysinβa21x+a22y+a23z+a24=ycosβ+xsinβa31x+a32y+a33z+a34=za41x+a42y+a43z+a44=1
解:
Rzβ=cosβsinβ00−sinβcosβ0000100001
繞 x 軸旋轉 —— Rx(α)#
同理可得(固定 x)
Rxα=10000cosαsinα00−sinαcosα00001
繞 y 軸旋轉 —— Ry(γ)#
同理可得(固定 y)
Ryγ=cosγ0−sinγ00100sinγ0cosγ00001
於是我們得到了三維的旋轉矩陣
R=RxαRyγRzβ
但是看到這一定會產生這樣的疑問 —— 我該如何將繞某個軸的 θ 角分解為 α β γ 呢?這個疑問先留著,我好再水一篇文章。
只不過目前旋轉的軸都被限制在過原點這一前提下,如果旋轉軸並不過原點的話,得先把軸平移到過原點,隨後再旋轉,旋轉結束後再平移到原來的位置。任何複雜的變換都可以分解為數個簡單變換的合成。
沿著 X 軸切變#
即描述從 (x, y, z) 到 (x + my + nz, y, z), m,n 均為正切函數
a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44xyz1=x+m∗y+n∗zyz1
解得
1000m100n0100001
沿著 Y 軸切變#
描述點 (x, y, z) 到點 (x, y + mx + nz, z)
求解就跳過了,相信聰明的大家一定看出來了行列項代表的意思了
1m0001000n100001
沿著 Z 軸切變#
描述點 (x, y, z) 到點 (x, y, z + mx + ny)
10m001n000100001