轉自:http://baike.baidu.com/view/2132318.htm
所謂齊次坐標就是將一個原本是n維的向量用一個n+1維向量來表示。 實數。顯然一個向量的齊次表示是不唯一的,齊次坐標的h取不同的值都表示的是同一個點,比如齊次坐標[8,4,2]、[4,2,1]表示的都是二維點[4,2]。
那麼引進齊次坐標有什麼必要,它有什麼優點呢?
許多圖形應用涉及到幾何變換,主要包括平移、旋轉、縮放。以矩陣表達式來計算這些變換時,平移是矩陣相加,旋轉和縮放則是矩陣相乘,綜合起來可以表示為p' = m1*p + m2(m1旋轉縮放矩陣, m2為平移矩陣, p為原向量 ,p'為變換後的向量)。引入齊次坐標的目的主要是合並矩陣運算中的乘法和加法,表示為p' = M*p的形式。即它提供了用矩陣運算把二維、三維甚至高維空間中的一個點集從一個坐標系變換到另一個坐標系的有效方法。
它可以表示無窮遠的點。n+1維的齊次坐標中如果h=0,實際上就表示了n維空間的一個無窮遠點。對於齊次坐標[a,b,h],保持a,b不變,|V|=(x1*x1,y1*y1,z1*z1)^1/2的過程就表示了標准坐標系中的一個點沿直線 ax+by=0 逐漸走向無窮遠處的過程。
轉自:http://www.cnblogs.com/csyisong/archive/2009/08/31/1351372.html
一直對齊次坐標這個概念的理解不夠徹底,只見大部分的書中說道「齊次坐標在仿射變換中非常的方便」,然後就沒有了後文,今天在一個叫做「三百年 重生」的博客上看到一篇關於透視投影變換的探討的文章,其中有對齊次坐標有非常精辟的說明,特別是針對這樣一句話進行了有力的證明:「齊次坐標表示是計算機圖形學的重要手段之一,它既能夠用來明確區分向量和點,同時也更易用於進行仿射(線性)幾何變換。」—— F.S. Hill, JR。
由於作者對齊次坐標真的解釋的不錯,我就原封不動的摘抄過來:
對於一個向量v以及基oabc,可以找到一組坐標(v1,v2,v3),使得v = v1 a + v2 b + v3 c(1)
而對於一個點p,則可以找到一組坐標(p1,p2,p3),使得 p – o = p1 a + p2 b + p3 c (2)
從上面對向量和點的表達,我們可以看出為了在坐標系中表示一個點(如p),我們把點的位置看作是對這個基的原點o所進行的一個位移,即一個向量——p – o(有的書中把這樣的向量叫做位置向量——起始於坐標原點的特殊向量),我們在表達這個向量的同時用等價的方式表達出了點p:
p = o + p1 a + p2 b + p3 c (3)
(1)(3)是坐標系下表達一個向量和點的不同表達方式。這裡可以看出,雖然都是用代數分量的形式表達向量和點,但表達一個點比一個向量需要額外的信息。如果我寫出一個代數分量表達(1, 4, 7),誰知道它是個向量還是個點!
我們現在把(1)(3)寫成矩陣的形式:v = (v1 v2 v3 0) X (a b c o)
p = (p1 p2 p3 1) X (a b c o),這裡(a,b,c,o)是坐標基矩陣,右邊的列向量分別是向量v和點p在基下的坐標。這樣,向量和點在同一個基下就有了不同的表達:3D向量的第4個代數分量是0,而3D點的第4個代數分量是1。像這種這種用4個代數分量表示3D幾何概念的方式是一種齊次坐標表示。
這樣,上面的(1, 4, 7)如果寫成(1,4,7,0),它就是個向量;如果是(1,4,7,1),它就是個點。下面是如何在普通坐標(Ordinary Coordinate)和齊次坐標(Homogeneous Coordinate)之間進行轉換:
(1)從普通坐標轉換成齊次坐標時
如果(x,y,z)是個點,則變為(x,y,z,1);
如果(x,y,z)是個向量,則變為(x,y,z,0)
(2)從齊次坐標轉換成普通坐標時
如果是(x,y,z,1),則知道它是個點,變成(x,y,z);
如果是(x,y,z,0),則知道它是個向量,仍然變成(x,y,z)
以上是通過齊次坐標來區分向量和點的方式。從中可以思考得知,對於平移T、旋轉R、縮放S這3個最常見的仿射變換,平移變換只對於點才有意義,因為普通向量沒有位置概念,只有大小和方向.
而旋轉和縮放對於向量和點都有意義,你可以用類似上面齊次表示來檢測。從中可以看出,齊次坐標用於仿射變換非常方便。
此外,對於一個普通坐標的點P=(Px, Py, Pz),有對應的一族齊次坐標(wPx, wPy, wPz, w),其中w不等於零。比如,P(1, 4, 7)的齊次坐標有(1, 4, 7, 1)、(2, 8, 14, 2)、(-0.1, -0.4, -0.7, -0.1)等等。因此,如果把一個點從普通坐標變成齊次坐標,給x,y,z乘上同一個非零數w,然後增加第4個分量w;如果把一個齊次坐標轉換成普通坐標,把前三個坐標同時除以第4個坐標,然後去掉第4個分量。