简单来说,“仿射变换”就是:“线性变换”+“平移”,本文记录相关内容。
之前我们整理过 线性变换 相关的知识,核心有三点:
在 线性变换 中其实也提到了仿射变换,当时就定性了平面上二维仿射变换不是线性变换,因为原点会移动。
仿射变换从几何直观只有两个要点:
相比于线性变换就是不再保持原点的自我映射
的仿射变换具有下列形式:
也就是说,仿射变换由一线性变换加上一平移量构成。因为
\vec{y}=A \vec{x}+\vec{b} 可以写作 \left[\begin{array}{l}\vec{y} \ 1\end{array}\right]=\left[\begin{array}{cc}A & \vec{b} \ 0 & 1\end{array}\right]\left[\begin{array}{l}\vec{x} \ 1\end{array}\right]
即虽然在当前维度下仿射变换不是线性变换,但可以通过升维,实现通过高维线性变换完成低维仿射变换的效果。
引用马同学的解释:
这样我就可以在二维空间下通过 \left[\begin{array}{cc}A & \vec{b} \ 0 & 1\end{array}\right] $``$ z=1 平面上的二维正方形,完成仿射变换:
维基百科 中有动图形象地揭示了这个过程:
仿射变换主要有旋转、平移、缩放、错切四种常见变换以及他们的任意组合形式。
变换名称 | 变换矩阵 | 示例 |
---|---|---|
恒等变换 | $\left\begin{array}{lll}1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1\end{array}\right$ | |
平移 | $\left\begin{array}{ccc}1 & 0 & v_{x}>0 \ 0 & 1 & v_{y}=0 \ 0 & 0 & 1\end{array}\right$ | |
翻转 | $\left\begin{array}{ccc}-1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1\end{array}\right$ | |
缩放 | $\left\begin{array}{ccc}c_{x}=2 & 0 & 0 \ 0 & c_{y}=1 & 0 \ 0 & 0 & 1\end{array}\right$ | |
旋转 | $\left\begin{array}{ccc}\cos (\theta) & -\sin (\theta) & 0 \ \sin (\theta) & \cos (\theta) & 0 \ 0 & 0 & 1\end{array}\right$ | |
错切 | $\left\begin{array}{ccc}1 & c_{x}=0.5 & 0 \ c_{y}=0 & 1 & 0 \ 0 & 0 & 1\end{array}\right$ | |