齊次空間 放射變換

2021-06-19 09:22:24 字數 1678 閱讀 7856

4d向量是由3d座標(x,y,z)和齊次座標w組成,寫作(x,y,z,w)。

在3d世界中為什麼需要3d的齊次座標呢?簡單地說明一下,在一維空間中的一條線段上取一點x,然後我們想轉移x的位置,那我們應該是x'=x+k,但我們能使用一維的矩陣來表示這變換嗎?不能,因為此時一維的矩陣只能讓x點伸縮。但如果變成了一維的齊次空間[k 1]就很容易地做到。同樣地,在二維空間中,某一圖形如果不使用二維的齊次座標,則只能旋轉和伸縮,確不能平移。

因此,我們在3d座標中使用齊次座標,是為了物體在矩陣變換中,除了伸縮旋轉,還能夠平移,如下運算:

既然了解了使用齊次座標的意義,我們下一步就要了解一下齊次座標w是什麼意義。設w=1,此時相當於我們把3d的座標平移搬去了w=1的平面上,4d空間的點投影到w=1平面上,齊次座標對映的3d座標是(x/w,y/w,z/w),也就是(x,y,z)。(x,y,z)在齊次空間中有無數多個點與之對應。所有點的形式是(kx,ky,kz,k),其軌跡是通過齊次空間原點的「直線」(其實每個點相當於3d的座標世界)。

當w=0時,有很大的意義,可解釋為無窮遠的「點」,其意義是描述方向。這也是平移變換的開關,當w=0時,

此時不能平移變換了。這個現象是非常有用的,因為有些向量代表「位置」,應當平移,而有些向量代表「方向」,如表面的法向量,不應該平移。從幾何意義上說,能將第一類資料當作"點",第二類資料當作"向量"。可以通過設定w的值來控制向量的意義

。在《directx 9.0 3d遊戲開發必成基礎》(清華大學出版社),第一部分的「基本變換」一節中,有這麼提到

前面我們提到講某一點的座標或某一向量的各分量放入乙個1x4的行向量v中。但是我們所關心的點和向量都是3d的!為什麼我們要使用1x4的行向量?為了使向量-矩陣乘積有意義,我們必須將3d的點或向量擴充套件為4d行向量,因為乙個1x3的行向量和乙個4x4矩陣是無法定義乘法運算的。

接下來的一段這麼說,

「那麼我們應該如何使用第4個分量(用w表示)?將點放入乙個1x4的行向量時,我們將w分量設為1。這能夠保證點的平移變換正確進行。因為向量不含位置資訊,所以沒有對向量定義平移變換,任何企圖對向量實施平移變換的運算只能產生乙個毫無意義的向量。為了防止對向量進行平移變換,當我們將1x3向量置入1x4行向量時,將w分量置為0。」

上面的一段說明了最後乙個分量什麼時候該用0。

後面更有這麼一段文字說明,很有啟發性,

「當我們將點(x,y,z)寫作(x,y,z,1)的形式時,從技術角度,我們實際上在4d空間中用乙個4d平面(w=1)來描述3d空間。(注意:4d空間中的平面是3d的,就像3d中的平面式乙個2d空間一樣)。所以,當我們將w設為某個值時,我們便偏離了平面w=1。為了重新對映回該平面(對於我們熟悉的3d空間),我們只需將齊次向量的每個分量除以w。」

對於上面的4d到3d的所謂對映,正是齊次座標的功力所在。

齊次空間的裁剪

感謝 softwarekid的博文 1.本文將分為下面三部分 為什麼能用齊次座標進行裁剪 使用齊次座標裁剪的步驟 2.引入 為什麼不在投影除法後裁剪 指經過透視變化矩陣之後的得到齊次座標 透視除法指將透視投影得到的齊次座標轉化為三維座標,即除以齊次分量,經過透視除法的點才是在規範化裁剪立方體中的點。...

學習HALCON放射變換

學習halcon用到的一些函式 1 vector angle to rigid compute a rigid affine transformation from points and angles.計算點和角度到另乙個點和角度的仿射矩陣,根據矩陣計算點與點之間的變換關係。2 angle ll c...

放射變換引數求解

仿射變換 affine transformation或 affine map 是一種二維座標到二維座標之間的線性變換,它保持了二維圖形的 平直性 即 直線經過變換之後依然是直線 和 平行性 即 二維圖形之間的相對位置關係保持不變,平行線依然是平行線,且直線上點的位置順序不變 放射變換可以寫為如下的形...