1. 程式人生 > >關於齊次坐標系的理解

關於齊次坐標系的理解

絕對坐標系 好的 每一個 想象 過多 笛卡爾坐標系 16px 系統 cal

為什麽叫齊次坐標系?

  齊次坐標系,英文名稱Homogeneous coordinate system。也就是說Homogeneous國內翻譯為“齊次”,查詢“齊次”的解釋,谷歌翻譯Homogeneous是“同質”的意思,百度翻譯結果是“均勻的;同性質的,同類的;由相同(或同類型)事物(或人)組成的;[數]齊性的,齊次的”。所以從名字上我們不能顧名思義,只能先理解齊次坐標系在來思考這個名字了。

  首先我們先從齊次性開始理解。

齊次性定義

在百度百科裏的解釋:

一般地,在數學裏面,如果一個函數的自變量乘以一個系數,那麽這個函數將乘以這個系數的k次方,我們稱這個函數為k次齊次函數,也就是: 如果函數 f(v)滿足
f(ax)=a^k f(x), 其中,x是輸入變量,k是整數,a是非零的實數,則稱f(x)是k次齊次函數。 比如:一次齊次函數就是線性函數2.多項式函數 f(x,y)=x^2+y^2 因為f(ax,ay)=a^2f(x,y),所以f(x,y)是2次齊次函數。 齊次性在數學中描述的是函數的一個倍數的性質。 齊次坐標系

以下摘自維基百科對於齊次坐標系的描述:

在數學裏,齊次坐標(homogeneous coordinates),或投影坐標(projective coordinates)是指一個用於投影幾何裏的坐標系統,如同用於歐氏幾何裏的笛卡兒坐標一般。該詞由奧古斯特·費迪南德·莫比烏斯於1827年在其著作《Der barycentrische Calcul》一書內引入[1][2]。齊次坐標可讓包括無窮遠點的點坐標以有限坐標表示。使用齊次坐標的公式通常會比用笛卡兒坐標表示更為簡單,且更為對稱。齊次坐標有著廣泛的應用,包括電腦圖形及3D電腦視覺。使用齊次坐標可讓電腦進行仿射變換,並通常,其投影變換能簡單地使用矩陣來表示。

實投影平面可以看作是一個具有額外點的歐氏平面,這些點稱之為無窮遠點,並被認為是位於一條新的線上(該線稱之為無窮遠線)。每一個無窮遠點對應至一個方向(由一條線之斜率給出),可非正式地定義為一個點自原點朝該方向移動之極限。在歐氏平面裏的平行線可看成會在對應其共同方向之無窮遠點上相交。給定歐氏平面上的一點 (x, y),對任意非零實數 Z,三元組 (xZ, yZ, Z) 即稱之為該點的齊次坐標。依據定義,將齊次坐標內的數值乘上同一個非零實數,可得到同一點的另一組齊次坐標。例如,笛卡兒坐標上的點 (1,2) 在齊次坐標中即可標示成 (1,2,1) 或 (2,4,2)。原來的笛卡兒坐標可透過將前兩個數值除以第三個數值取回。因此,與笛卡兒坐標不同,一個點可以有無限多個齊次坐標表示法。

一條通過原點 (0, 0) 的線之方程可寫作 nx + my = 0,其中 n 及 m 不能同時為 0。以參數表示,則能寫成 x = mt, y = ? nt。令 Z=1/t,則線上的點之笛卡兒坐標可寫作 (m/Z, ? n/Z)。在齊次坐標下,則寫成 (m, ? n, Z)。當 t 趨向無限大,亦即點遠離原點時,Z 會趨近於 0,而該點的齊次坐標則會變成 (m, ?n, 0)。因此,可定義 (m, ?n, 0) 為對應 nx + my = 0 這條線之方向的無窮遠點之齊次坐標。因為歐氏平面上的每條線都會與透過原點的某一條線平行,且因為平行線會有相同的無窮遠點,歐氏平面每條線上的無窮遠點都有其齊次坐標。

概括來說:

  • 投影平面上的任何點都可以表示成一三元組 (X, Y, Z),稱之為該點的‘齊次坐標或投影坐標,其中 X、Y 及 Z 不全為 0。
  • 以齊次坐標表表示的點,若該坐標內的數值全乘上一相同非零實數,仍會表示該點。
  • 相反地,兩個齊次坐標表示同一點,當且僅當其中一個齊次坐標可由另一個齊次坐標乘上一相同非零常數得取得。
  • 當 Z 不為 0,則該點表示歐氏平面上的該 (X/Z, Y/Z)。
  • 當 Z 為 0,則該點表示一無窮遠點。
  • 註意,三元組 (0, 0, 0) 不表示任何點。原點表示為 (0, 0, 1)[3]。

  從上面的描述我們知道齊次坐標是用於投影幾何裏的坐標系統,和平時我們用的笛卡爾坐標系一樣,是幫助我們理解宇宙的工具。但因為這是兩種不同的坐標系,我們需要跳出笛卡爾坐標系,以更宏觀的思維來理解,不然有些場景會讓我們困惑。

  首先我們把下方的這個投影描述圖印在腦海中。

技術分享圖片

  考慮一個點p,它的笛卡爾坐標是(x,y),齊次坐標是(x,y,1),齊次坐標比笛卡爾坐標多一個維度,按照現在書上和網絡上的理解基本都是說笛卡爾坐標系就是齊次坐標系中w=1的那個平面,(x,y,1)是齊次坐標(kx,ky,k)表示的點在w=1上的映射。因為一開始我把這個投影想成了正交投影,所以總感覺不對。

  那為什麽要引入齊次坐標系了?

  上面也提到了,主要是方便計算機圖形學進行仿射幾何變換。簡單的理解就是可以使用矩陣同時描述旋轉和平移,這樣我們就可以使用矩陣相乘來表述物體的旋轉、縮放和平移了,具體內容可參照《計算機圖形學》等書籍或者網上的資料。

  如:https://oncemore.wang/blog/homogeneous/

無窮遠的點

  使用(∞,∞)?所以在笛卡爾坐標系中無窮遠的點是沒有定義的。但這個在齊次坐標系統中可以用w=0來表示無窮遠的點,即任何(x,y,0)表示無窮遠的點。

兩條平行線在無限遠處相交

  笛卡爾坐標系中兩條平行線沒有交點,即使在三維空間也是,但在齊次坐標系中它們在無窮遠點相交。

引申的理解  

 1.坐標系理解

  在笛卡爾坐標系中有一個原點(0,0),對於這個點我以前沒有過多的考慮,後來參考了很多資料,有一個說法,想象在宇宙中有一個絕對坐標系,對於我們現在使用的笛卡爾坐標系,其原點位於(a,b)點,當然同時也就還有無數的相同的坐標系,只不過它們的原點不同,對於笛卡爾坐標系中的點(x,y),它對於所有的笛卡爾坐標系都是相同的,有點多維宇宙的感覺,其中一個坐標系就是一個宇宙。我覺得這種思維也很有意思。

  2.向量和點

  關於向量和點,我覺得下面的這邊文章說的很好,大家可以參考。

  https://blog.csdn.net/winbobob/article/details/38829001

  以下都是我根據這篇博客的得來的感悟。描述一個點比描述一個向量需要更多的信息。我們平時的描述一個點時,其實都忽略了一個信息,即參照點的信息,我們都是基於參照點描述一個點的位置,這個參照點就是原點。下面是我從上面博客截取的一段關於點和向量的一個解釋:

對於一個向量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幾何概念的方式是一種齊次坐標表示。

  

  上面的推導很完美,但還是有種只知其然的感覺。其實這裏有一個非常重要的點沒有指出來,就是變換對應矩陣的乘法。這裏的變換有平移、旋轉、縮放。我們做的這些推導都是想要用矩陣的乘法來表示變換,只有這樣上面的推導才不顯得突兀。而齊次坐標系的出現,也是處於計算機使用矩陣乘法來表示仿射變換的需求。所以理解齊次坐標系,很重要的一點就是為什麽我們需要齊次坐標系。

  對於齊次坐標系,我一直想知道它的幾何意義,但由於使用歐氏幾何的三維空間來理解,總是不得要領。現在覺得,首先我們要明白這些坐標系都是我們理解這個世界的工具,有些工具對於世界的描述很貼合我們對於世界的想象,所以常用,但另外一些工具是從其它的角度來解讀這個世界的,在我們使用這些工具之前,我們需要跳出原先的思維(如齊次坐標系再更高維度的仿射變換映射為低維度的平移),這樣才能更好的理解這個世界的本質。

關於齊次坐標系的理解