图形系统中的仿射变换
?終于建了一個自己個人小站:https://huangtianyu.gitee.io,以后優先更新小站博客,歡迎進站,O(∩_∩)O~~
? ? ? 在學圖形學的時候,仿射變換肯定會遇到,那到底什么是仿射變換了?在做仿射變換時一般都會用到齊次坐標,這個齊次坐標又是什么?下面是我自己學習過程中的一些領悟,記錄下來做個總結。
????? 首先給出簡短的定義:仿射變換是線性變換(旋轉和縮放)加平移變換,齊次坐標就是用高一維的空間坐標表示低一維空間的坐標。
????? 這里解釋下線性變換,線性變換也就是在兩個向量之間的函數,它保持向量加法和標量乘法的運算。
向量加法:?(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效果一樣。
?
總結
以上是生活随笔為你收集整理的图形系统中的仿射变换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware NAT模式
- 下一篇: 《Orange’s 一个操作系统的实现》