為什么用齊次坐標(biāo)?

本文為個(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)行說明。

  1. 能非常方便的表達(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

  2. 方便表達(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 = ||a||||b||sin(θ)\overrightarrow{e}
    其中,θ表示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)

  3. 能夠區(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)

  4. 能夠表達(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)的概念

  5. 更簡(jiǎn)潔的表達(dá)歐式變換
    使用非齊次坐標(biāo)
    x' = Rx + t
    使用齊次坐標(biāo)(x和'為齊次坐標(biāo))
    x' = Tx

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容