齊次坐標#
“齊次坐標表示是計算機圖形學的重要手段之一,它既能夠用來明確區分向量和點,同時也更易於進行仿射(線性)幾何變換。”—— F.S. Hill, JR。
正如引用中所說,齊次坐標最大的特點在於它的存在可以區分描述 坐標 與 向量
簡單的說,在普通的直角坐標系(或者說笛卡爾坐標系也行)中,(xA, yA) 可以表示點 A,也可以用來表示向量 oA。這種含糊不清的表述方式並不利於準確的抽象描述給計算機。
而齊次坐標通過將 n 維提升到 n+1 維從而解決了這個問題。
我們可以在一個 2D 笛卡爾坐標末尾加上一個額外的變量 w 來形成 2D 齊次坐標,因此,一個點 (X,Y) 在齊次坐標裡面變成了(x,y,w),並且有
X = x/w
Y = y/w
如在齊次坐標中
- 描述一個點 A,其表示為 (xA, yA, 1)
- 描述一個向量 $\vec {oA}$,其表示為 (xA, yA, 0)
試著將 w=1,0 帶入 x/w,便可以理解為何 1 表示點(位置)、0 表示向量(方向)了。
除此之外也方便進行向量加法之類的操作

當然除了描述向量與點外,齊次坐標的引入也方便描述幾何變換 (線性變換)。
比如如果不用齊次坐標表示的二維平移是下圖這樣的

二維圖形基本幾何變換#
二維圖形變換大致分為以下五類 —— 平移(Translate)、縮放(Scale)、旋轉(Rotate)、反射(Reflect)和錯切(shear)
1. 平移#
描述從點 (x, y) 到 (x + dx, y+ dy)
引入齊次坐標,可表述為 (x, y, 1) 變形推導為 (x + dx, y+ dy, 1)
此時線性變換便可作為工具描述變換過程了,引入變換矩陣後,該問題就變成了求解變換矩陣
已知:
adgbehcfixy1=x+dxy+dy1
得
⎩⎨⎧ax+by+c=x+dxdx+ey+f=y+dygx+hy+i=1
解得變換矩陣為
100010dxdy1
於是在數學層面我們就可以用這個變換矩陣來描述平移過程了。
2. 縮放#
描述從點 (x, y) 到 (sx*x, sy*y),sx 與 sy 為常量。
引入齊次坐標,可表述為 (x, y, 1) 變形推導為 (sx*x, sy*y, 1)
引入變換矩陣
已知:
adgbehcfixy1=sx∗xsy∗y1
得
⎩⎨⎧ax+by+c=sx∗xdx+ey+f=sy∗ygx+hy+i=1
解得變換矩陣為
sx000sy0001
3. 旋轉#
解釋旋轉需要引入單位圓。

如圖,點 B 旋轉至 點 C 處,AB 與 X 軸的夾角為 α,AC 與 AB 夾角為 β
則 B 點坐標可表示為 (cosα, sinα),C 點坐標為 (cos (α + β), sin (α + β))
將 C 點坐標展開,則 C 點為 (cosα cosβ - sinα sinβ, sinα cosβ + cosα sinβ)
記 B 點坐標為 (x, y),C 點坐標則為 (x cosβ - y sinβ, y cosβ + x sinβ)
引入齊次坐標,可表述為 (x, y, 1) 變形推導為 (x cosβ - y sinβ, y cosβ + x sinβ, 1)
引入變換矩陣
已知:
adgbehcfixy1=xcosβ−ysinβycosβ+xsinβ1
得
⎩⎨⎧ax+by+c=xcosβ−ysinβdx+ey+f=ycosβ+xsinβgx+hy+i=1
解得變換矩陣為
cosβsinβ0−sinβcosβ0001
4. 反射#
在數學中,反射是把一個物體變換成它的鏡像的映射。要反射一個平面圖形,需要 “鏡子” 是一條直線(反射軸),對於三維空間中的反射就要使用平面作為鏡子。
如果根據引用,那麼反射可分為根據 X 軸反射與根據 Y 軸反射,但實際上也存在中心反射(點反射)這一概念
根據 X 軸反射#
描述點 (x, y) 到點 (x, -y)
已知:
adgbehcfixy1=x−y1
得:
⎩⎨⎧ax+by+c=xdx+ey+f=−ygx+hy+i=1
解得變換矩陣:
1000−10001
根據 Y 軸反射#
描述點 (x, y) 到點 (-x, y)
已知:
adgbehcfixy1=−xy1
得:
⎩⎨⎧ax+by+c=−xdx+ey+f=ygx+hy+i=1
解得變換矩陣:
−100010001
根據 點 (p, q) 反射#
描述點 (x, y) 到點 (2p-x, 2q-y)
已知:
adgbehcfixy1=2p−x2q−y1
得:
⎩⎨⎧ax+by+c=2p−xdx+ey+f=2q−ygx+hy+i=1
解得變換矩陣:
−1000−102p2q1
5. 錯切#
定義見圖,其實就像是圖形在某一方向上的扭曲,底下只貼推導過程。需注意的是 α 與 β 範圍為 [0, 90°)

y 軸為依賴軸的錯切變換#
描述點 (x, y) 到點 (x + y.tanα, y)
已知:
adgbehcfixy1=x+y.tanαy1
得:
⎩⎨⎧ax+by+c=x+y.tanαdx+ey+f=ygx+hy+i=1
解得變換矩陣:
100tanα10001
x 軸為依賴軸的錯切變換#
描述點 (x, y) 到點 (x, y + x.tanβ)
已知:
adgbehcfixy1=xy+x.tanβ1
得:
⎩⎨⎧ax+by+c=xdx+ey+f=y+x.tanβgx+hy+i=1
解得變換矩陣:
1tanβ0010001