八边形点坐标数的lisp_图形学入门第五课:齐次坐标
齊次坐標(Homegeneous Coordinates)
在學習齊次坐標之前,我們要先好奇的問一下,為什么要學習齊次坐標。上一節課,我們學習了變換的三種基本形式:旋轉,縮放,和切變。但是還有一種特殊的變換:Translation(平移變換)
從上邊的圖中我們可以看到左邊的圖x在x方向移動后變成了Tx, y在y方向移動變成了Ty,變成了右邊的圖。我們可以用一種簡單的代數來表達:
雖然上邊的表達看似簡單,但是學過矩陣后,我們思考一下,是否可以把上邊的平移依然可以像上節課的公式那樣寫成某一個變換矩陣x?向量(x,y)?
我們會發現,不能。而我們只能寫成下面這樣一種形式:
因為X'?需要變成ax+by+一個常量,Y'變成bx+cy+一個常量。這種常量的引入,導致平移變換沒辦法用一個矩陣乘以一個向量的公式來表達。為了統一平移變換跟其他三種變換用一種表達式來表達,人類發明了一種方法:可以通過多添加一個維度,來對齊,統一各種變換。
那么用齊次坐標來表示,針對2D空間中的一個點,可以寫成這樣一個平移公式:
在二維里,一個點和向量可以增加一個維度來表示。
上邊的公式,會發現,2D空間中的一個點,我們通過增加第三個維度,多了一個1,或者0來表示。這種表達后,我們就可以在結果中來變相的表達之前代數的表達形式, 如下邊紅框標注的這樣:表示出了線性變化+一個常數
這種通過多增加一個維度來表示2D空間中的點,叫做齊次坐標。
這里要注意到上邊的表達。一個2D中的點,如果想用來表示這個點依然是一個標量點,我們給它引入一個等于1的數,變成(x,y,1)。如果想用來表示這個點是個向量,即,從原點指向這個點的一個方向,我們寫成(x,y,0)。
思考:我們為什么要把一個點,區分成標量,和向量兩種表達呢?一個添加為0,一個添加為1??
答案:向量被稱作向量就是因為它有方向性,它在空間平移后,它的方向是不變。所以向量具有平移不變性。所以,我們用其次坐標來表示一個點的時候,當他跟一個平移矩陣相乘后,得出的向量依然應該是它本身。所以(x,y,0)中的0就起到了保護向量平移后不變的作用,因為0乘以任何數都等于0。那么為什么標量添加的第三個維度是1 呢?我們來看下邊四個公式:
兩個vector相加,依然是個vector。例如三角形法則,兩個向量相加,得出一個新的向量。
空間中兩個點相減,表示被減數指向減數的向量。例如:
(x,y,1)- (x',y',1)?= (x-x', y-y', 0) 這樣一個?從(x,y)指向(x',y')一個向量。
一個點 加一個vector:意思是空間中一個點,沿著一個方向移動到一個新的點上。那么依然是一個點。
一個點加一個點:本身沒什么意義。但是我們可以先借助下邊的公式:
定義:在齊次左邊中,空間中的一個w不等0的點,都可以表示成上述w=1的一個2D的點。
那么利用上邊這個定義,我們可以得出,兩個點相加等于這兩個點所形成的線段的中點。?(大家可以自己思考一下為什么是中點?)
總結:?引用齊次坐標的目的,就是希望把所有的仿射變換都寫成一個矩陣乘以一個列矩陣的形式。
對于任何一種變換,如果我們不能只用一個矩陣乘以向量來完成,例如平移這種變換,而且都要額外通過加上一個平移常量,我們管這種變換叫做仿射變換(Affine Transformations)。
仿射變換
所有的仿射變換都可以寫成齊次坐標的表現形式:
我們來看一下齊次坐標的表達式,做一下總結:
它的最后一行永遠是(0,0,1)
他的平移永遠寫在最后一列
那么我們按照齊次坐標的方法,可以把上節課的二維的仿射變換都可以變成齊次坐標來表達:
逆變換(Inverse Transform)
圖中的時鐘,經過一個M變化后,變成右邊,然后再通過逆矩陣,回到原來的左下角,如上圖所示。這就叫逆變換。我們會發現:一個矩陣乘以一個自己的逆矩陣就是單位矩陣。單位矩陣的意思就是沒有發生變化。
變化的組合
那接下來我們看變換的組合。思考下邊的變換是怎么完成的呢?
思考1:我們是否可以先平移然后再旋轉?
嘗試:先平移,再旋轉。
嘗試后,我們發現如果先平移再旋轉,得到的結果并不是我們想要的。注意,我們所說的旋轉是指圍繞原點的旋轉。
思考2:我們是否可以先旋轉然后再平移?
嘗試:先旋轉,再平移。
這種嘗試是可行的。
通過上邊的例子,我們可以得出兩個結論:
復雜的變化可以通過一系列簡單的變換來組成
這些變換的順序非常重要,順序的不同,最終的變換結果也不同。
通過上邊的兩個結論我們轉換成矩陣的角度,可以這么解釋:
一個向量的變換可以通過多個變換矩陣按照依次的順序相乘來完成。
所以,變換矩陣的順序很重要。矩陣相乘不滿足乘法交換律。變換矩陣的是從右向左依次施加的。
接下來總結公式:
變換的重合
可以把所有的變換矩陣A1,A2,A3。。。An依次相乘,合成一個復雜的變換矩陣。然后跟一個向量相乘,最終完成對一個向量的復雜變換操作。
變換的分解
變換可以重合就可以分解。
思考:下邊的一種平移,把下圖的左下角的一個圖形變換成最右邊的那個圖形,怎么操作?
答案:先平移到原點,旋轉,再平移回去。
3D?Transformations
為了解決平移這種非線性變換,2D空間中的變換,我們引用了齊次坐標的方法,在解決3D變換的時候,我們也希望用一個統一方法,來解決3D空間中的變換。
3D空間中的一個點,用齊次坐標來表示,引入一個新的數。
1,表示一個點;0表示它是一個向量。
那么(x,y,z,w),其實表示的是三維空間中的一個點:(x/w,y/w,z/w,1),其中那個1表示它是3D空間的中一個點。
所以,在3D空間中,齊次左邊所標注的空間的點和矩陣的變換就是一個4x4的矩陣:
思考:上邊這樣的一個公式里,是先線性變換再平移,還是先平移再線性變換呢?
答案:跟2D一樣,是先做線性變換,再做平移。
總結
以上是生活随笔為你收集整理的八边形点坐标数的lisp_图形学入门第五课:齐次坐标的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贴贴app如何使用
- 下一篇: 百度贴吧app怎么创建贴吧(百度产品大全