“齊次坐標表示是計算機圖形學的重要手段之一,它既能夠用來明確區分向量和點,同時也更易用於進行仿射(線性)幾何變換。”—— F.S. Hill, JR。
齊次坐標主要是應用在矩陣轉換中,我們通常運算的坐標系是“笛卡爾坐標系”,我們已經習慣了笛卡爾坐標系的表述方式,一個點都有唯一對應的數據值來表示,比如原點我們就記做(0,0)點。而笛卡爾坐標系和齊次坐標系的根本區別在於“齊次性”。
所謂齊次坐標就是將一個原本是n維的向量用一個n+1維向量來表示。 顯然一個向量的齊次表示是不唯一的,齊次坐標的h取不同的值都表示的是同一個點,比如齊次坐標[10,4,2]、[5,2,1]表示的都是二維點[5,2]。
那么引進齊次坐標有什么必要,它有什么優點呢?
由於[10,4,2]、[5,2,1]表示的都是[5,2]一個點,如果有一個公式需要將[5,2]點參與的運算3維運算,而我們的點只有2維的表示,那么我們在值不變的情況下增加一個齊次坐標,使之變成3維,而能夠參加運算並不影響最終結果,這就是齊次坐標的價值。
許多圖形應用涉及到幾何變換,主要包括平移、旋轉、縮放。以矩陣表達式來計算這些變換時,平移是矩陣相加,旋轉和縮放則是矩陣相乘,綜合起來可以表示為p' = p *m1+ m2(m1旋轉縮放矩陣, m2為平移矩陣, p為原向量 ,p'為變換后的向量)。引入齊次坐標的目的主要是合並矩陣運算中的乘法和加法,表示為p' = p*M的形式。即它提供了用矩陣運算把二維、三維甚至高維空間中的一個點集從一個坐標系變換到另一個坐標系的有效方法。
那么齊次坐標是怎么表示點和向量的呢?
那要從齊次坐標的線性代數性質來看:
一維齊次點坐標:
通過上面的定義可以看出,一維的點坐標x的值是齊次坐標中(x1,x2)的關系有 x = x1/x2; 如果x2=1,那么既可以表示為(x,1).其中最特別的點是(0,1)
如果有齊次坐標(x1,x2),由於x2=0的時候表達式分母為零,除法表達式失去意義,因此(x1,0)表示的是一個無窮遠點。即忽略其長度屬性,那么它就表示一個方向,其中最特別的是(1,0)。
對於 二維齊次點坐標:
上圖表達的意義就是一個點(x,y)他的齊次坐標就是(w*x,w*y,w)其中w不為0
下表列舉了一些點的其次表示方式:
任意方向的無窮遠點是(x1,x2,0)其中方向為x2/x1。y軸上的無窮遠點的表示方式是(0,x2,0)。
再用向量的辦法來看看 齊次坐標表示“向量“和“點”的區別:
對於一個向量v以及基oabc,可以找到一組坐標(v1,v2,v3),使得v = v1 a + v2 b + v3 c(1)
現在有一個點P,根據向量的性質,v=p-o (o是原點,v表示從坐標原心指向點p的向量) ,那么代入上式即可得到 p – o = p1 a + p2b + p3c (2)
那么點 p的表達式就是 p = o + p1 a + p2 b + p3 c (3) 那么就會發現,點p的表達式就要比向量v多一個信息。但是o也可以用三維向量來表述,所以
P(1,2,3)和V(1,2,3)從值上而言是完全沒有區別的,所以點的就可以用(1,2,3,1)來表示,而向量是(1,2,3,0)。齊次坐標的w為0表示無窮遠點,那就只能代表一個方向了。