本文為個(gè)人筆記,查看原文請(qǐng)關(guān)注公眾號(hào):計(jì)算機(jī)視覺life
什么是齊次坐標(biāo)
定義:齊次坐標(biāo)就是將一個(gè)原本是n維的向量用一個(gè)n+1維向量來表示,是指一個(gè)用于投影幾何里的坐標(biāo)系統(tǒng),如同用于歐氏幾何里的笛卡兒坐標(biāo)一般。
(x, y) -> (x, y, 1)
(x, y, z) -> (x, y, z, 1)
使用齊次坐標(biāo)有什么優(yōu)勢(shì)
齊次坐標(biāo)的使用能夠大大簡(jiǎn)化在三維空間中的點(diǎn)線面表達(dá)方式和旋轉(zhuǎn)平移等操作,具體分如下幾點(diǎn)進(jìn)行說明。
能非常方便的表達(dá)點(diǎn)在直線或在平面上
2D平面上,直線可用方程 ax + by + c = 0 表示,用向量表示一般記為:l = (a, b, c)T
點(diǎn) p = (x, y) 在直線 l 上的充分必要條件是 ax + by + c = 0
使用齊次坐標(biāo),點(diǎn)p的齊次坐標(biāo)是:p' = (x, y, 1)
那么 ax + by + c = 0 就可以使用兩個(gè)向量的內(nèi)積(點(diǎn)乘)表示:
ax + by + c = (a, b, c)T(x, y, 1) = lT * p' = 0
因此,點(diǎn)p在直線l上的充分必要條件就是直線l的向量與p的齊次坐標(biāo)p'的內(nèi)積為零:
lT * p' = 0
三維空間類似,點(diǎn)P在平面A上的充分必要條件是平面A與向量P的齊次坐標(biāo)P'的內(nèi)積為零:
AT * P' = 0-
方便表達(dá)直線與直線,平面與平面的交點(diǎn)
在齊次坐標(biāo)下,可以用兩個(gè)點(diǎn)p, q的齊次坐標(biāo)叉乘結(jié)果來表達(dá)一條直線l,也即是 l = p × q
也可以用兩條直線 l, m 的叉乘表示他們的交點(diǎn) x,x = l × m叉乘:兩個(gè)向量a和b的叉乘盡在三維空間中有定義,寫作a×b
a×b是與a和b都垂直的向量
其模長(zhǎng)等于以兩個(gè)向量為邊的平行四邊形的面積
叉乘可以定義為:
其中,θ表示a,b的夾角(0。到180。之間),||a||,||b||是向量的模長(zhǎng)
e則是一個(gè)與向量a,b所構(gòu)成的平面垂直的單位向量
根據(jù)叉乘定義:
向量自身叉乘結(jié)果為0,因?yàn)閵A角為0。也就是說三維向量 a x a =0, b x b = 0,而點(diǎn)乘(也稱點(diǎn)積,內(nèi)積)的定義是a * b = ||a||* ||b|| * cos(θ)
根據(jù)定義:如果兩個(gè)向量垂直,cos(θ) = 0,點(diǎn)積也為0。為什么兩條直線 l, m 的叉乘 l × m 等于他們的交點(diǎn) p, 也就是 p = l× m?
原因如下:
首先,根據(jù)前面叉乘的定義, l ×m 的結(jié)果向量(記為 p = l×m)與l 和m 都垂直,根據(jù)點(diǎn)乘的定義,垂直的向量之間的點(diǎn)積為0,因此可以得到:
lT * (l × m) = lT * p = 0
mT * (l × m) = mT * p = 0
因此,根據(jù)前面點(diǎn)在線上的結(jié)論,可以看到p即在直線m上,又在直線l上,所以 p = l×m 是兩條直線的交點(diǎn)。此處p是齊次坐標(biāo) 能夠區(qū)分一個(gè)向量和一個(gè)點(diǎn)
如果(x, y, z)是一個(gè)點(diǎn),則變?yōu)?x, y, z, 1)
如果(x, y, z)是一個(gè)向量,則變?yōu)?x, y, z, 0)能夠表達(dá)無窮遠(yuǎn)
比如兩條平行的直線 ax + by + c = 0, ax + by + d = 0,
可以分別用向量 l = (a, b, c), m = (a, b, d)表示
根據(jù)前面直線交點(diǎn)的計(jì)算方法,其交點(diǎn)為 l×m
根據(jù)叉乘計(jì)算法則,可以得到 l×m = (d - c)( b, -a, 0),忽略標(biāo)量(d-c),我們的到交點(diǎn)為(b, -a, 0),并且是齊次坐標(biāo)如果要轉(zhuǎn)化為非齊次坐標(biāo),那么會(huì)得到(b/0, a/0),坐標(biāo)是無窮大,可以認(rèn)為該點(diǎn)為無窮遠(yuǎn)。符合平行線相交于無窮遠(yuǎn)的概念更簡(jiǎn)潔的表達(dá)歐式變換
使用非齊次坐標(biāo)
x' = Rx + t
使用齊次坐標(biāo)(x和'為齊次坐標(biāo))
x' = Tx