仿射變換

仿射變換（Affine transformation），又稱仿射映射，是指在幾何中，對一個向量空間進行一次線性變換並接上一個平移，變換為另一個向量空間。

一個對向量$\vec{x}$平移$\vec{b}$，與旋轉縮放$A$的仿射映射為

$$\vec{y} = A \vec{x} + \vec{b}$$

上式在齊次坐標上，等價於下面的式子

$$\begin{bmatrix} \vec{y} \\ 1 \end{bmatrix} = \begin{bmatrix} A & \vec{b} \ \\ 0, \ldots, 0 & 1 \end{bmatrix} \begin{bmatrix} \vec{x} \\ 1 \end{bmatrix}$$

在分形的研究裡，收縮平移仿射映射可以製作具有自相似性的分形。

## 數學定義

一個於兩仿射空間間定義的仿射變換 $f\colon \mathcal{A}\to\mathcal{B}$ 是一個點集映射，線性地作用於向量（即空間中的點之間的向量）。形式化表述是，$f$ 決定一線性變換 $\varphi$，使得對於任意 $\mathcal A$ 中的點對 $P,Q$，有：

$$\overrightarrow{f(P)~f(Q)}=\varphi\left(\overrightarrow{PQ}\right)$$

或記

$$f(Q)-f(P)=\varphi(Q-P).$$

我們可以以其他一些方式解釋這一定義，以下進行說明：

若於 $\mathcal A$ 中選定一原點 $O$，記其於 $\mathcal B$ 中的像為 $f(O)$，那麼就意味著，對於任意向量 $\boldsymbol{x}\in\mathcal A$，有

$$f\colon(O+\boldsymbol{x})\mapsto(B+\varphi(\boldsymbol x)).$$

而若於 $\mathcal B$ 中選定一原點 $O'$，則其可分解為一將 $O$ 映到 $O'$ 的仿射變換 $g\colon\mathcal A\to\mathcal B$，換言之，遵從向量 $\boldsymbol b=\overrightarrow{O'B}$ 之變換。

$$g\colon(O+\boldsymbol{x})\mapsto(O'+\varphi(\boldsymbol x)).$$

以上可以直觀地總結為，仿射變換包含一個線性映射與一個變換。

### 等價定義

給定相同域上的兩仿射空間 $\mathcal{A}$ 和 $\mathcal{B}$，稱一映射 $f: \mathcal{A} \to \mathcal{B}$ 為仿射變換，若且唯若對於任意 $\mathcal{A}$ 上滿足 $\sum_{i\in I}\lambda_i=\boldsymbol 1$ 的權重點簇 $\{(a_i, \lambda_i)\}_{i\in I}$ 有

$$f\left(\sum_{i\in I}\lambda_ia_i\right)=\sum_{i\in I}\lambda_if\left(a_i\right).$$

換言之，$f$ 保持了原相的質心。

## 表示

如上所示，仿射變換為兩函數的複合：平移及線性映射。普通向量代數用矩陣乘法呈現線性映射, 用向量加法表示平移。正式言之，於有限維度之例中，假如該線性映射被表示為一矩陣「Ａ」，平移被表示為向量 $\vec{b}$，一仿射映射 $f$可被表示為

$$\vec{y} = f(\vec{x}) = A \vec{x} + \vec{b}.$$

### 增廣矩陣

<image>

使用一增廣矩陣與一增廣向量，用一矩陣乘法同時表示平移與線性映射是有可能的。此技術需要所有向量在其末端擴長「1」且所有矩陣都於底部添加一排零，右邊擴長一列轉換向量，及右下角添加一個「1」。

$$\begin{bmatrix} \vec{y} \\ 1 \end{bmatrix} = \left[ \begin{array}{ccc|c} \, & A & & \vec{b} \ \\ 0 & \ldots & 0 & 1 \end{array} \right] \begin{bmatrix} \vec{x} \\ 1 \end{bmatrix}$$

等價於

$$\vec{y} = A \vec{x} + \vec{b}.$$

以上所言之擴長矩陣被稱為「仿射變換矩陣」，又或稱為「投射變換矩陣」（其可應用於投影轉換)。

此表示法以Kn之半直積與GL(n, k)展示了 所有可逆仿射變換的集合。此為一個於眾函數集結下進行的一個群，被稱為仿射群。

普通矩陣向量乘法總將原點映射至原點，因此無法呈現平移（原點必須映射至其他點）。藉由於所有向量上擴增一座標「1」，我們將原空間映至更高維空間的一個子集合以進行變換。在該空間中，原本之空間佔有了擴長座標一的1的子集合。因此原空間的原點可在(0,0, ... 0, 1)。原空間的平移可藉由更高維度空間的線性轉換來達成（即為錯切變換）。在高維度中的座標即為齊次座標的一例。假如原空間為歐幾里德，則更高維空間為實射影空間。

使用齊次座標的優點為，藉由相對應矩陣之乘積，可將任意數目的仿射變換結合為一。此性質被大量運用於電腦圖形，電腦視覺與機器人學。

## 性質

仿射變換保留了：

- 點之間的共線性：在同一條直線上的三個或更多的點（稱為共線點）在變換後依然在同一條直線上（共線）。
- 直線的平行性：兩條或以上的平行直線，在變換後依然平行。
- 集合的凸性：凸集合變換後依然是凸集合。並且，最初的極值點被映射到變換後的極值點集。
- 平行線段的長度的比例：兩條由點 $p_1,p_2,p_3,p_4$ 定義的平行線段，$\overrightarrow{p_1p_2}$ 與 $\overrightarrow{p_3p_4}$的長度的比例等於$\overrightarrow{f(p_1)f(p_2)}$與$\overrightarrow{f(p_3)f(p_4)}$的長度的比例。
- 不同質量的點組成集合的質心。

仿射變換為可逆的若且唯若$A$為可逆的。用矩陣表示，其逆元為：

$$\left[ \begin{array}{ccc|c} & A^{-1} & & -A^{-1}\vec{b} \ \\ 0, & \ldots & ,0 & 1 \end{array} \right]$$

可逆仿射變換組成仿射群，其中包含具n階的一般線性群為子群，且自身亦為一 $n+1$ 階的一般線性群之子群。

當A為常數乘以正交矩陣時，此子集合構成一子群，稱之為相似變換。舉例而言，假如仿射變換於一平面上且假如 $A$ 之行列式為 $1$ 或 $-1$，那麼該變換即為等面積變換。此類變換組成被稱為等仿射群的子群。一同時為等面積變換與相似變換的變換，即為一平面上保持歐幾里德距離不變的保距映射。

這些群都有一保留了原定向的子群，也就是其對應之 $A$ 的行列式大於零。最後一個例子，即三維空間中剛體的運動組成的群（旋轉和平移），剛體的運動在機器人學中尤為常用。

如果有一固定點，我們可以將其當成原點，則仿射變換被縮還到一線性變換。這使得變換更易於分類與理解。舉例而言，將一變換敘述為特定軸的旋轉，相較於將其形容為平移與旋轉的結合，更能提供變換行為清楚的解釋。只是，這取決於應用與內容。

## 實例

### 實數之仿射變換

函數$f: \mathrm{R} \rightarrow \mathrm{R}$, $f(x)=mx+c$，其中$m$與$c$為常數，此即為一般之仿射變換。

### 有限體的仿射變換

以下等式表示了有限體(28)中的仿射變換:

$$\{\,a'\,\} = M\{\,a\,\} \oplus \{\,v\,\},$$

此處M為矩陣 且 {v} 為向量 :

$M\{\,a\,\}= \begin{bmatrix} 1&0&0&0&1&1&1&1 \\ 1&1&0&0&0&1&1&1 \\ 1&1&1&0&0&0&1&1 \\ 1&1&1&1&0&0&0&1 \\ 1&1&1&1&1&0&0&0 \\ 0&1&1&1&1&1&0&0 \\ 0&0&1&1&1&1&1&0 \\ 0&0&0&1&1&1&1&1 \end{bmatrix}$ :$\{\,v\,\}= \begin{bmatrix} 1 \\ 1 \\ 0 \\ 0 \\ 0 \\ 1 \\ 1 \\ 0 \end{bmatrix}.$

舉例來講，將以大端序二進位表示的元素$\{a\} = y^7 + y^6 + y^3 + y=\{ 11001010\}$轉換成大端序十六進位，計算如下：

$$a_0' = a_0 \oplus a_4 \oplus a_5 \oplus a_6 \oplus a_7 \oplus 1 = 0 \oplus 0 \oplus 0 \oplus 1 \oplus 1 \oplus 1 = 1$$

$$a_1' = a_0 \oplus a_1 \oplus a_5 \oplus a_6 \oplus a_7 \oplus 1 = 0 \oplus 1 \oplus 0 \oplus 1 \oplus 1 \oplus 1 = 0$$

$$a_2' = a_0 \oplus a_1 \oplus a_2 \oplus a_6 \oplus a_7 \oplus 0 = 0 \oplus 1 \oplus 0 \oplus 1 \oplus 1 \oplus 0 = 1$$

$$a_3' = a_0 \oplus a_1 \oplus a_2 \oplus a_3 \oplus a_7 \oplus 0 = 0 \oplus 1 \oplus 0 \oplus 1 \oplus 1 \oplus 0 = 1$$

$$a_4' = a_0 \oplus a_1 \oplus a_2 \oplus a_3 \oplus a_4 \oplus 0 = 0 \oplus 1 \oplus 0 \oplus 1 \oplus 0 \oplus 0 = 0$$

$$a_5' = a_1 \oplus a_2 \oplus a_3 \oplus a_4 \oplus a_5 \oplus 1 = 1 \oplus 0 \oplus 1 \oplus 0 \oplus 0 \oplus 1 = 1$$

$$a_6' = a_2 \oplus a_3 \oplus a_4 \oplus a_5 \oplus a_6 \oplus 1 = 0 \oplus 1 \oplus 0 \oplus 0 \oplus 1 \oplus 1 = 1$$

$$a_7' = a_3 \oplus a_4 \oplus a_5 \oplus a_6 \oplus a_7 \oplus 0 = 1 \oplus 0 \oplus 0 \oplus 1 \oplus 1 \oplus 0 = 1.$$

於是， {a′} = y7 + y6 + y5 + y3 + y2 + 1 = {11101101} = {ED}。

### 平面幾何之仿射變換

<image>

在 ℝ2，左方所示之變換即為以下映射：

$$\begin{bmatrix} x \\ y\end{bmatrix} \mapsto \begin{bmatrix} 0&1\\ 2&1 \end{bmatrix}\begin{bmatrix} x \\ y\end{bmatrix} + \begin{bmatrix} -100 \\ -100\end{bmatrix}$$

將原紅色三角形之三個頂點作變換後給出了新藍色三角形的三個頂點。事實上，所有三角形皆可由仿射變換來達成，所有平行四邊形也可以，但一般四邊形不行。