仿射變換

本文的閱讀等級:初級

A 為一 n\times n 階實矩陣,\mathbf{b}n 維實向量,定義於幾何向量空間 \mathbb{R}^n 的仿射變換 (affine transformation) 具有下列形式:

T(\mathbf{x})=A\mathbf{x}+\mathbf{b}

也就是說,仿射變換由一線性變換加上一平移量構成。因為 T(\mathbf{0})=\mathbf{b},除非平移量 \mathbf{b} 為零,仿射變換不是線性變換。仿射變換有兩個相當特殊的性質:共線 (collinearity) 不變性和比例不變性,意思是 \mathbb{R}^n 的任一直線經仿射變換的像 (image) 仍是一直線,而且直線上各點之間的距離比例維持不變。

 
L\mathbb{R}^n 中任一直線,其參數式為 L=\{t\mathbf{v}+\mathbf{u}\vert t\in\mathbb{R}\},向量 \mathbf{v}\neq\mathbf{0} 代表直線指向,\mathbf{u} 是直線上一點。令 \mathbf{p}_1,\mathbf{p}_2,\mathbf{p}_3 為直線 L 上的三個相異點,也就有 \mathbf{p}_i=t_i\mathbf{v}+\mathbf{u}i=1,2,3,此三點經仿射變換 T(\mathbf{x})=A\mathbf{x}+\mathbf{b} 後的新位置分別為

\begin{aligned}  \mathbf{p}_i^{\prime}&=T(\mathbf{p}_i)\\  &=A(t_i\mathbf{v}+\mathbf{u})+\mathbf{b}\\  &=t_iA\mathbf{v}+A\mathbf{u}+\mathbf{b},~~i=1,2,3\end{aligned}

\mathbf{v}^{\prime}=A\mathbf{v}\mathbf{u}^{\prime}=A\mathbf{u}+\mathbf{b},新位置可以表示成 \mathbf{p}^{\prime}_i=t_i\mathbf{v}^{\prime}+\mathbf{u}^{\prime},所以確認這三個點經過仿射變換後仍位於同一直線 L^{\prime}=\{t\mathbf{v}^{\prime}+\mathbf{u}^{\prime}\vert t\in\mathbb{R}\}。計算三點之間的距離比例,

\begin{aligned}  \displaystyle\frac{\Vert\mathbf{p}^{\prime}_{2}-\mathbf{p}^{\prime}_1\Vert}{\Vert\mathbf{p}^{\prime}_{3}-\mathbf{p}^{\prime}_2\Vert}&=\frac{\Vert(t_2-t_1)\mathbf{v}^{\prime}\Vert}{\Vert(t_3-t_2)\mathbf{v}^{\prime}\Vert}=\frac{\Vert(t_2-t_1)\mathbf{v}\Vert}{\Vert(t_3-t_2)\mathbf{v}\Vert}=\frac{\Vert\mathbf{p}_2-\mathbf{p}_1\Vert}{\Vert\mathbf{p}_3-\mathbf{p}_2\Vert}\end{aligned}

上式證明了仿射變換維持各點之間的距離比例。

 
為了讓所有常用的幾何變換──旋轉、鏡射、伸縮、切變與平移等皆可納入同一套矩陣乘法運算機制,我們引入齊次座標 (homogeneous coordinates) 的概念與技巧。下面的分塊矩陣乘法把仿射變換的 A 矩陣和 \mathbf{b} 向量併入一個增廣變換矩陣:

T(\mathbf{x})=\begin{bmatrix}    A&\mathbf{b}    \end{bmatrix}\begin{bmatrix}    \mathbf{x}\\    1    \end{bmatrix}

此式富有高度暗示性,若將 n 維向量 \mathbf{x} 擴充成 n+1 維增廣向量 \begin{bmatrix}    \mathbf{x}\\    1    \end{bmatrix},也稱為齊次座標,如此一來,仿射變換即可表示為增廣矩陣和齊次座標向量的乘積:

\begin{bmatrix}    T(\mathbf{x})\\    1    \end{bmatrix}=\begin{bmatrix}    A&\mathbf{b}\\    \mathbf{0}^T&1    \end{bmatrix}\begin{bmatrix}    \mathbf{x}\\    1    \end{bmatrix}

上面的 (n+1)\times(n+1) 階增廣矩陣 \begin{bmatrix}    A&\mathbf{b}\\    \mathbf{0}^T&1    \end{bmatrix} 稱為仿射變換矩陣。不難觀察出

\begin{aligned}  \begin{bmatrix}    A&\mathbf{b}\\    \mathbf{0}^T&1    \end{bmatrix}\begin{bmatrix}    A^{-1}&-A^{-1}\mathbf{b}\\    \mathbf{0}^T&1    \end{bmatrix}&=\begin{bmatrix}    I_n&\mathbf{0}\\    \mathbf{0}^T&1    \end{bmatrix}=I_{n+1}\end{aligned}

這指出若 A 可逆,則仿射變換 T(\mathbf{x}) 可逆,反之亦然,逆仿射變換即為

\begin{aligned}  T^{-1}(\mathbf{x})&=A^{-1}\mathbf{x}-A^{-1}\mathbf{b}=A^{-1}(\mathbf{x}-\mathbf{b})\end{aligned}

 
以下整理了數個以仿射變換矩陣表示的 \mathbb{R}^2 幾何變換,關於幾何變換矩陣的推導請參閱“幾何變換矩陣的設計”。

平移

Tr(a,b)=\begin{bmatrix}    1&0&a\\    0&1&b\\    0&0&1    \end{bmatrix}

旋轉

R(\theta)=\begin{bmatrix}    \cos\theta&-\sin\theta&0\\    \sin\theta&\cos\theta&0\\    0&0&1    \end{bmatrix}

鏡射

F(a,b)=\begin{bmatrix}    a^2-b^2&2ab&0\\    2ab&b^2-a^2&0\\    0&0&1    \end{bmatrix}

注意,鏡射線方向由 \begin{bmatrix}    a\\    b    \end{bmatrix} 指出,且 a^2+b^2=1

伸縮

S(s_x,s_y)=\begin{bmatrix}    s_x&0&0\\    0&s_y&0\\    0&0&1    \end{bmatrix}

切變

H_x(k)=\begin{bmatrix}    1&k&0\\    0&1&0\\    0&0&1    \end{bmatrix},~H_y(k)=\begin{bmatrix}    1&0&0\\    k&1&0\\    0&0&1    \end{bmatrix}

 
使用齊次座標的主要好處是我們可以藉由矩陣乘法運算合併多個仿射變換成一個複合變換,下面舉二個仿射變換矩陣的設計例子。

 
例一:以平面上任意點為中心逆時針旋轉

\mathbf{p}=\begin{bmatrix}    a\\    b    \end{bmatrix} 為旋轉中心,對此點的旋轉可拆解成三個基本變換:

  1. 將旋轉中心 \mathbf{p} 平移至原點,平移矩陣為 T_r(-a,-b)
  2. 繞著原點逆時針旋轉 \theta,旋轉矩陣為 R(\theta)
  3. 再將原點平移至 \mathbf{p},平移矩陣為 Tr(a,b)

上面三個變換矩陣乘積即為所求,

Tr(a,b)R(\theta)Tr(-a,-b)=\begin{bmatrix}    \cos\theta&-\sin\theta&a(1-\cos\theta)+b\sin\theta\\    \sin\theta&\cos\theta&b(1-\cos\theta)-a\sin\theta\\    0&0&1    \end{bmatrix}

 
例二:對不穿越原點的直線鏡射

令鏡射線為 L=\{t\mathbf{v}+\mathbf{u}\vert t\in\mathbb{R}\}\mathbf{v}=\begin{bmatrix}    a\\    b    \end{bmatrix} 指出直線行進方向,a^2+b^2=1,非零向量 \mathbf{u}=\begin{bmatrix}    c\\    d\\    \end{bmatrix} 為直線上一點。類似例一的作法,對直線 L 鏡射可分解為三個基本變換,如下:

  1. 平移直線 L 使其穿越原點,平移矩陣為 Tr(-c,-d)
  2. 對此穿越原點的直線鏡射,變換矩陣為 F(a,b)
  3. 再把直線平移回原位置,平移矩陣即 Tr(c,d)

將上述三個矩陣相乘便得到

Tr(c,d)F(a,b)Tr(-c,-d)=\begin{bmatrix}    a^2-b^2&2ab&-c(a^2-b^2-1)-2dab\\    2ab&b^2-a^2&d(a^2-b^2+1)-2cab\\    0&0&1    \end{bmatrix}

廣告
本篇發表於 線性代數專欄, 仿射幾何 並標籤為 , , 。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s