一、線性變換與仿射變換的概念
我們知道在計算機圖形學中,變換通常包含線性變換、仿射變換、透視變換等。并且,我們用4x4的矩陣表述變換,同時引入了齊次坐標。那么,為什么會這樣呢?
在討論這個問題之前,我們需要了解一下線性變換和仿射變換的定義。
線性映射:在兩個向量空間之間的一種保持向量加法和標量乘法的特殊映射。
線性變換種類較多,通常有旋轉、縮放、錯切、鏡像等。
仿射映射:指在幾何中,一個向量空間進行一次線性變換并接上一個平移,變換為另一個向量空間。
二、用方程組表述線性變換與仿射變換
首先,我們討論一下線性變換。由于線性變換種類較多,這里僅討論最常見的旋轉變換。
在三維笛卡爾坐標系中,我們如何得到點
繞Z軸逆時針旋轉α度后新的坐標
?
由于是繞Z軸旋轉,我們可以輕易地把笛卡爾坐標系轉換為平面上的極坐標系
,
為半徑坐標。假設點
與X軸夾角為
,我們可以得到
關于
,
的方程(此處
不用考慮)。
和
由方程組(1)和方程組(2)可以得出:
接下來我們討論一下仿射變換中的特例:平移。
思考一個問題:在三維笛卡爾坐標系中,我們如何平移一個點
?很簡單,我們只需要將每一個坐標分量和對應的偏移量相加即可。
三、用矩陣表述線性變換和仿射變換
如果我們僅僅做單次的旋轉或者平移,上面的方程組已經足夠了。然而,在實際的項目當中,我們通常需要做復雜的連續的變換操作。如果還用這種方程組的辦法,大量的計算不論是對開發人員還是計算機都是一種不必要的負擔。因此,尋找一種更加方便計算的方法是無比迫切的事情。聯系到矩陣與方程組的關系,以及矩陣乘法的本質,矩陣表述變換由此變得自然。
因此,旋轉變換方程組可以由矩陣表述為:
由式(5)可以得出,旋轉變換是一個3x3矩陣(設為)與點
的乘積結果。即:
如果有多線性變換,其結果為:
同理,平移變換可以由矩陣表述為:
四、為什么是4x4矩陣?
很遺憾,平移無法用3x3矩陣與向量的乘法來計算。也就是說,3x3矩陣不能使投影變換的計算變得簡單方便。
什么樣的矩陣才能同時表述線性變換和平移?
回過頭去重新審視方程組(3)、(4),上面的問題變成了什么樣的矩陣能夠同時表達方程組(3)、(4)。
考慮為了同時滿足方程組(3)、(4),我們可以構造一個特殊的方程組:
這個方程組是一次旋轉與一次平移的結合。然而,方程組中存在常量,我們如何用矩陣乘法來表述這個非齊次方程組呢?
我們可以把它看作一個四元齊次式,其中新增一個分量用來表示偏移量:
由方程組(9)、(10)可知:
現在,我們可以用4x4矩陣來表述方程組(11):
此時,我們已經可以用4x4矩陣同時表述旋轉與平移。代價是我們新增了一個分量。
五、齊次坐標
上面提到的三位點額外添加一個分量
組成的四元組,其實就是齊次坐標。那么,我們如何用齊次坐標表示三維的點呢?
事實上,齊次坐標 三維坐標
,
。
六、齊次坐標如何區分向量與點
由方程組(10)、(12)中,當,
時,
這就是點的平移變換。
我們也知道,線性變換是發生在兩個向量空間之間的,也就是說,一個向量經過線性變換會生成一個新的向量。而向量是沒有位置的,所以向量沒有平移變換。為了使得平移對向量無效,此時,。
由方程組(10)、(12)可知,當時,三維向量的旋轉變換矩陣表述為
由方程式(13)、(14)可知,齊次坐標可以很好的區分向量和點。即,是點,
是向量。