天天看點

圖形系統中的仿射變換

      在學圖形學的時候,仿射變換肯定會遇到,那到底什麼是仿射變換了?在做仿射變換時一般都會用到齊次坐标,這個齊次坐标又是什麼?下面是我自己學習過程中的一些領悟,記錄下來做個總結。

      首先給出簡短的定義:仿射變換是線性變換(旋轉和縮放)加平移變換,齊次坐标就是用高一維的空間坐标表示低一維空間的坐标。

      這裡解釋下線性變換,線性變換也就是在兩個向量之間的函數,它保持向量加法和标量乘法的運算。

向量加法: 

圖形系統中的仿射變換

(1) 

标量乘法: 

圖形系統中的仿射變換

(2)                     

線性變換可以用矩陣表示,假設空間一個點坐标為p=(x,y),T表示一個線性變換,則存在一個矩陣A使得

p'=(x',y')=T(p)=Ap。旋轉和縮放都是線性變換,因為它們都保持了上述兩個性質。用矩陣表示如下:

旋轉:

圖形系統中的仿射變換

 (3) 

縮放:

圖形系統中的仿射變換

(4) 

平移:

圖形系統中的仿射變換

(5) 

仿射變換也就是上面三個變換的疊加,在上面三個變換中平移變換是沒辦法使用矩陣相乘的方式來擷取的。但是如果将坐标在高一維空間進行表示的時候,也就是采用齊次坐标的時候,平移變換可以用矩陣乘法來進行表示。假設p=(x,y,1)是齊次坐标下二維點p(x,y)的坐标表示,具體表示如下:

圖形系統中的仿射變換

 (6) 

圖形系統中的仿射變換

(7) 

圖形系統中的仿射變換

(8) 

這樣就以上三個進行統一,便得到了仿射變換的矩陣表示,其定義也更容易表達,仿射變換也就是下面的變換:

仿射變換:

圖形系統中的仿射變換

(9) 

當将一個矩陣表示成如下形式時:

圖形系統中的仿射變換

(10) 

其中

圖形系統中的仿射變換

分别表示旋轉縮放和平移變換。

從上面可以看出,引入齊次坐标的好處就是将這三個變換進行統一用矩陣的形式進行表示,矩陣運算在程式設計的時候容易實作,而且仿射變換也有個性質:仿射變換後保持點共線及共面的性質。

在公式(10)裡面的1,如果變換成其他數值,則表示對整體進行縮放,也就是相當于在整個矩陣外面乘以一個w效果一樣。

繼續閱讀