Homogeneous Coordinates(齊次座標)
Homogeneous Coordinates(齊次座標)
一般的轉換可以寫成矩陣的形式,像是
我們可以寫成
因此我們有了 Scale Matrix、Reflection Matrix、Shear Matrix、Rotation Matrix 等等,這些都可以寫成矩陣乘向量的形式:
或我們說的更精確一點,他們是線性轉換
然而當我們今天做平移的操作時,像是這樣:
那他就只能寫成:
而不能寫成上方那種單純的矩陣乘向量的形式了,或者說他不是線性轉換了,變成了一個特例
然而我們並不希望將平移視作一個特殊狀況,畢竟平移蠻常用的,因此就需要使用齊次座標
首先是二維的轉換,在向量上多了一個維度來表示是點還是向量:
- 2D 點 =
- 2D 向量 =
注意都是縱向量,這是圖學上的習慣
多了一個維度後平移便可以用矩陣乘向量來表示:
可以看見原本點
這邊要提一下,第三個維度是有設計過的,在
- 向量 + 向量 = 向量
- 點 - 點 = 向量
- 點 + 向量 = 點
- 點 + 點 = 兩點中點
對於最後一點,人們後來擴充了齊次座標的意義,向量
的實際 xy 座標為
也就是說兩點相加的結果會變為兩點的中點,因為
Affine Transform(仿射轉換)
使用齊次的優點就是可以將這類的轉換:
直接寫成矩陣乘向量的形式:
這類轉換我們稱其為仿射轉換,使用齊次座標,我們就可以只用一個矩陣來表示仿射轉換了
也可以簡單看幾個二維的線性轉換:
Scale Transform
Rotation Transform
Translation Transform
其中有一點很重要的是
By definition:
Inverse Transform(逆轉換)
如果我們對一個點進行仿射操作後想要讓他回到操作前的樣子,那可以直接將點乘上原先的逆矩陣,舉個例子,將
若我們想將
然後乘上去:
如此一來便可以回到操作前的狀態了
Composition(組合)
我們可以將不同的轉換先依序相乘組合成一個矩陣,這樣跟把轉換矩陣一個一個乘上去的結果會一樣,在寫的時候要注意轉換的順序
舉個例子,將點
因為矩陣有結合率,我們可以將其組合,寫成:
這裡有個重點是,當我們把它合成一個矩陣的時候,要記住它是先做線性變換再做平移,如果你要先做平移,就要分開寫成兩個矩陣
舉個簡單的應用範例
假設我們想要將左圖透過轉換變成右圖:

讀完了上面的你,肯定可以知道這可以透過平移與旋轉達成,但是這時候要注意順序。 假設你先是先平移再旋轉,則會變成下圖的樣子:

這個例子中我們需要先旋轉再平移:

同時這些變換是可以做分解的,看以下例子:

上例中我們要將圖形以其左下角的頂點
三維空間的齊次座標
三維空間下的狀況也類似,多加上一個維度:
- 3D 點 =
- 3D 向量 =
同樣地,
伸縮
平移
仿射
仿射轉換的矩陣寫法也類似:
旋轉
其中