幾種基本矩陣變換的推導過程


前提:一個圖在直角坐標系上的所有點,都是從原點(0, 0, 0)開始。

以二維為例,所有的矩陣變換,都可以表示成  x` = ax + by,  y` = cx + dy.  這種表示方法的原理和背后的意義,見

《圖形學中的矩陣是什么,為什么長得這么奇怪?》

縮放矩陣 的推導

 如圖所示,所謂縮放,即一個圖上的所有點的x和y值,都乘以縮放系數S。縮放0.5,其實就是x值變成0.5x,y變成0.5y,寫成

 對比 x` = ax + by,  y` = cx + dy. 可知 a = s,b = 0, c = s,d = 0. 可推出縮放矩陣的變換為

旋轉矩陣 的推導

如圖所示,點P繞着原點(0, 0)旋轉θ

x` = c - d

y` = a + b

a = sinθ·x

b = cosθ·y

c = cosθ·x

d = -sinθ·y

x` = cosθ·x - sinθ·y

y` = sinθ·x + cosθ·y

 對比 x` = ax + by,  y` = cx + dy. 可得旋轉矩陣為

 平移矩陣 的推導

 如圖所示,所謂平移矩陣,即在x方向上移動了tx,在y方向上移動了ty

 可是,由於平移矩陣並不能表示成 x` = ax + by,  y` = cx + dy.的形式

於是我們在原來的維度上“強行”加多一維,用三維來表示二維

 

 

這樣,原來的表示方法依然成立:

x` = ax + by + ez

y` = cx + dy + fy

z` = gx + hy + iz 

那么在二維空間中,z值 是多少?

我們認為,對於一個點而言,z值是1;對於向量而言,z值是0,表示一個點沒有產生相對位移。

好了,現在拿平移矩陣代入這個形式中,

x` = x + tx = ax + by + ez(z=1),可知 a = 1, b = 0, e = tx

y` = y + ty = y` = cx + dy + fz(z=1),可知 c = 0, d = 1, f = ty

z` = 1 = gx + hy + iz(z=1),可知 g = 0,h = 0, i = 1

從而得到平移矩陣的變換為

 切變矩陣 的推導

 

如圖所示,所謂切變矩陣,即一個圖形上的某些點在x方向上發生了偏移,偏移的大小跟y有關,y越大偏移越大,即

x` = x + ?y

y` = y

再仔細分析,發現偏移值跟y的百分比有關,y為0時沒有偏移也就是,在中間y=0.5c時偏移0.5b,在最高點y=1c時偏移1b,可知 x的偏移量等於y/b*c,即

x` = x + (b/c)y

這里有2個變量b和c,我們可以減少其中一個變量的影響,即把c歸一化(b和c同時除以c),比如c是100,除以100等於1,那么b也除以100,把b/c看成a/1

  注意:這里的a是紅線等於1時的值,如果紅線等於其他值n,要除以n才能得到a


在齊次坐標中,點的齊次值w = 1,向量的齊次值w = 2,並且點和向量的關系為:

 

向量 + 向量,向量 - 向量   = 向量 (表示合並向量)齊次值w:0 + 0 = 0

點 - 點 = 向量 (表示兩點間的距離和方向)齊次值w:1 - 1 = 0

點 + 向量 = 點 (表示一個點經過一個距離和方向后的新點)齊次值w:1 + 0 = 1

點 + 點 = 點 (表示取兩個點的中心點)齊次值w:1 + 1 = 2,x、y、z、w同時除以2, = 1

 


免責聲明!

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



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