矩陣的位移,旋轉,縮放


1. 位移(translation)

對於一個三維坐標(x, y, z),我們想讓它往x軸正方向移動1個單位,往y軸正方向移動1個單位,往z軸正方向移動1個單位,則可以讓它加上一個向量(1, 1, 1)

2. 旋轉(Rotation)

對於一個三維坐標(x, y, z),讓其繞x, y, z軸旋轉θ角的方法是在其左邊乘上一個旋轉矩陣。繞x軸,繞y軸,繞z軸的旋轉矩陣分別是:


 
 

PS:如果我們想更加通用一點,即點(x, y, z)繞軸(u, v, w)旋轉θ的矩陣是什么?
如果u, v, w三者的平方和為1,即該向量是個單位向量,那么矩陣如下:


 
 

3. 縮放(scale)

對於一個三維坐標(x, y, z),我們想讓它擴大2倍,則可以讓它變成(2x, 2y, 2z)。寫成矩陣乘法的話,V2 = M*V1,M如下圖:


 
 

 
 

4. 統一變換

有沒有什么方法讓位移,旋轉,縮放都成為統一的一種形式?
答:將三維坐標轉換為四維坐標,然后使用線性變換。

線性變換(Linear Transformation / Xforms)是渲染和游戲引擎等圖形學工具進行坐標變換的方式,是可逆的。
線性變換的等式如下:
V2 = M*V1

  • V是齊次(homogeneous)四維向量(x,y,z,w),豎着寫的
  • M是齊次4×4矩陣
  • 當w=1時,四維坐標會變成三維坐標

對於三維坐標(x, y, z),將其轉換為四維坐標,可以直接加個1,即變成(x, y, z, 1)
對於四維坐標(x, y, z, w),都除以w即可轉換為三維坐標,即(x/w, y/w, z/w)

1. 四維位移

 
這個圖要從右向左看

從上圖中可以看到,四維位移矩陣,是在一個四維單位矩陣(就是對角線都是1,其他都是0的矩陣)的最后一列,放入你想要位移的向量(tx, ty, tz)

 

2. 四維旋轉

 
繞x軸轉θ

從上圖中可以看到,四維旋轉矩陣,是在我們上面剛說的三維繞軸旋轉矩陣的基礎上,在最后一行和最后一列補上一個(0,0,0,1)。

 

3. 四維縮放

 
從右向左看

和旋轉一個道理。

 

5. 四維變換的性質

  1. 可關聯(associative)
    你可以讓一個坐標乘上一個旋轉矩陣,再乘上一個位移矩陣,再乘上一個縮放矩陣,再乘上一個旋轉矩陣………………

  2. 旋轉和縮放矩陣可交換(communicative)
    先旋轉后縮放和先縮放后旋轉的結果是一樣的。RS = SR
    位移不滿足交換律
    先位移再旋轉和先旋轉再位移結果是不一樣的!因為旋轉之后模型的正面朝向就變了,所以會向新的方向位移。
    TS!=ST, TR!=RT

  3. 對於任何一個線性變換矩陣,我們可以把它拆解(decompose)為TRS或TSR三個矩陣的乘積的形式。


     
     

    1)首先提取最后一列,得到位移
    2)剩余的矩陣是R和S相乘的矩陣
    我們可以先看一下S和R相乘的結果是什么樣的


     
    SR相乘, 以Z軸旋轉為例

    從圖中可以看出,SR矩陣,第一行的平方和開根就是Sx,第二行的平方和開根就是Sy,第三行的平方和開根就是Sz。第一行除以Sx,第二行除以Sy,第三行除以Sz,即可得到旋轉矩陣。

6. 四維變換的逆變換

由於線性變換是可逆的,所以我們可以看一下位移旋轉縮放的逆矩陣。
1. 位移
T的逆矩陣是-T,即向反方向移動。
2. 旋轉
R的逆矩陣是R的轉置矩陣,即以對角線翻轉矩陣。
怎么理解呢?比如R是繞X軸旋轉θ,那么逆操作就是繞X軸旋轉,帶入-θ就會發現它變成了轉置矩陣。
3. 縮放
S的逆矩陣是1/S,即把對角線上的三個元素都變成倒數,即反向縮放。
4. 線性變換Xforms
TSR的逆矩陣 = R的逆×S的逆×T的逆

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM