仿射变换

仿射变换（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}$$

将原红色三角形之三个顶点作变换后给出了新蓝色三角形的三个顶点。事实上，所有三角形皆可由仿射变换来达成，所有平行四边形也可以，但一般四边形不行。