仿射变换 (Affine transformation),又称仿射映射 ,是指在几何 中,对一个向量空间 进行一次线性变换 并接上一个平移 ,变换为另一个向量空间。
一个对向量
x
→
{\displaystyle {\vec {x}}}
平移
b
→
{\displaystyle {\vec {b}}}
,与旋转缩放
A
{\displaystyle A}
的仿射映射为
y
→
=
A
x
→
+
b
→
{\displaystyle {\vec {y}}=A{\vec {x}}+{\vec {b}}}
上式在齐次坐标 上,等价于下面的式子
[
y
→
1
]
=
[
A
b
→
0
,
…
,
0
1
]
[
x
→
1
]
{\displaystyle {\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
{\displaystyle f}
'使得
φ
{\displaystyle \varphi }
,决定任一对点的线性变换:
P
,
Q
∈
A
{\displaystyle P,Q\in {\mathcal {A}}}
:
f
(
P
)
f
(
Q
)
→
=
φ
(
P
Q
→
)
{\displaystyle {\overrightarrow {f(P)~f(Q)}}=\varphi ({\overrightarrow {PQ}})}
或者
f
(
Q
)
−
f
(
P
)
=
φ
(
Q
−
P
)
{\displaystyle f(Q)-f(P)=\varphi (Q-P)}
.
其他定义
我们可以将此定义继续延伸:
假设选定一原点 ,
O
∈
A
{\displaystyle O\in {\mathcal {A}}}
且
B
{\displaystyle B}
表示其图像
f
(
O
)
∈
B
{\displaystyle f(O)\in {\mathcal {B}}}
, 如此即代表对任何向量
x
→
{\displaystyle {\vec {x}}}
:
f
:
(
O
+
x
→
)
↦
(
B
+
φ
(
x
→
)
)
.
{\displaystyle f:(O+{\vec {x}})\mapsto (B+\varphi ({\vec {x}})).}
假设选定一原点
O
′
∈
B
{\displaystyle O'\in {\mathcal {B}}}
,此即可以拆解成一仿射变换
g
:
A
→
B
{\displaystyle g:{\mathcal {A}}\to {\mathcal {B}}}
使得
O
↦
O
′
{\displaystyle O\mapsto O'}
, 特定而言
g
:
(
O
+
x
→
)
↦
(
O
′
+
φ
(
x
→
)
)
,
{\displaystyle g:(O+{\vec {x}})\mapsto (O'+\varphi ({\vec {x}})),}
,
总结即,很直观的,
f
{\displaystyle f}
包含了一个变换与线性坐标。
给定同一场中的两个仿射空间
A
{\displaystyle {\mathcal {A}}}
与
B
{\displaystyle {\mathcal {B}}}
, 一函数
f
:
A
→
B
{\displaystyle f:{\mathcal {A}}\to {\mathcal {B}}}
为一仿射映射当且仅当对任一加权点的集合
{
(
a
i
,
λ
i
)
}
i
∈
I
{\displaystyle \{(a_{i},\lambda _{i})\}_{i\in I}}
of weighted points in
A
{\displaystyle {\mathcal {A}}}
于 such that
我们得到[1]
f
(
∑
i
∈
I
λ
i
a
i
)
=
∑
i
∈
I
λ
i
f
(
a
i
)
.
{\displaystyle f\left(\sum _{i\in I}\lambda _{i}a_{i}\right)=\sum _{i\in I}\lambda _{i}f(a_{i})\,.}
此定义等价于
f
{\displaystyle f}
保留了 质心 .
表示
如上所示,仿射变换为两函数的复合 :平移 及线性映射 。普通向量代数用矩阵乘法 呈现线性映射, 用向量加法 表示平移。正式言之,于有限维度之例中,假如该线性映射被表示为一矩阵“A”,平移被表示为向量
b
→
{\displaystyle {\vec {b}}}
,一仿射映射
f
{\displaystyle f}
可被表示为
y
→
=
f
(
x
→
)
=
A
x
→
+
b
→
.
{\displaystyle {\vec {y}}=f({\vec {x}})=A{\vec {x}}+{\vec {b}}.}
增广矩阵
二维平面上的仿射变换可呈现于三维空间中。平移即为沿着z轴的
错切 ,旋转则以z轴为轴心
使用一 增广矩阵 与一增广向量, 用一矩阵乘法 同时表示平移与线性映射是有可能的。此技术需要所有向量在其末端扩长 “1”且所有矩阵都于底部添加一排零,右边扩长一列变换向量,及右下角添加一个 “1”。
[
y
→
1
]
=
[
A
b
→
0
…
0
1
]
[
x
→
1
]
{\displaystyle {\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}}}
等价于
y
→
=
A
x
→
+
b
→
.
{\displaystyle {\vec {y}}=A{\vec {x}}+{\vec {b}}.}
以上所言之扩长矩阵被称为 “仿射变换矩阵”,又或称为 “投射变换矩阵” (其可应用于 投影变换 )。
此表示法以 K n 之半直积 与 GL(n , k )展示了 所有可逆 仿射变换的集合。 此为一个于众函数集结下进行的一个 群 , 被称为 仿射群
普通矩阵向量乘法总将原点映射至原点,因此无法呈现平移(原点必须映射至其他点)。借由于所有向量上扩增一坐标 “1”,我们将原空间映至更高维空间的一个子集合以进行变换。在该空间中,原本之空间占有了扩长坐标一的1的子集合。 因此原空间的原点可在(0,0, ... 0, 1)。原空间的平移可借由更高维度空间的线性变换来达成(即为错切变换 )。在高维度中的坐标即为 齐次坐标 的一例。 假如原空间为欧几里德 , 则更高维空间为实射影空间 。
使用齐次坐标的优点为,借由相对应矩阵之乘积,可将任意数目的仿射变换结合 为一。此性质被大量运用于 计算机图形 , 计算机视觉 与 机器人学 。
性质
仿射变换保留了:
点之间的共线性 :在同一条直线上的三个或更多的点(称为共线点)在变换后依然在同一条直线上(共线);
直线的平行性 :两条或以上的平行直线,在变换后依然平行;
集合的凸性 :凸集合变换后依然是凸集合。并且,最初的极值点 被映射到变换后的极值点集[2] ;
平行线段的长度的比例:两条由点
p
1
,
p
2
,
p
3
,
p
4
{\displaystyle p_{1},p_{2},p_{3},p_{4}}
定义的平行 线段,
p
1
p
2
→
{\displaystyle {\overrightarrow {p_{1}p_{2}}}}
与
p
3
p
4
→
{\displaystyle {\overrightarrow {p_{3}p_{4}}}}
的长度的比例等于
f
(
p
1
)
f
(
p
2
)
→
{\displaystyle {\overrightarrow {f(p_{1})f(p_{2})}}}
与
f
(
p
3
)
f
(
p
4
)
→
{\displaystyle {\overrightarrow {f(p_{3})f(p_{4})}}}
的长度的比例;
不同质量的点组成集合的质心 。 仿射变换为可逆的 当且仅当
A
{\displaystyle A}
为可逆的。用矩阵表示,其逆元为:
[
A
−
1
−
A
−
1
b
→
0
,
…
,
0
1
]
{\displaystyle \left[{\begin{array}{ccc|c}&A^{-1}&&-A^{-1}{\vec {b}}\ \\0,&\ldots &,0&1\end{array}}\right]}
可逆仿射变换组成仿射群 ,其中包含具n阶的一般线性群 为子群,且自身亦为一
n
+
1
{\displaystyle n+1}
阶的一般线性群之子群。
当A为常数乘以正交矩阵 时,此子集合构成一子群,称之为相似变换 。举例而言,假如仿射变换于一平面上且假如
A
{\displaystyle A}
之行列式 为
1
{\displaystyle 1}
或
−
1
{\displaystyle -1}
,那么该变换即为等面积变换 。此类变换组成被称为等仿射群 的子群。一同时为等面积变换与相似变换的变换,即为一平面上保持欧几里德距离 不变的保距映射 。
这些群都有一保留了原定向 的子群,也就是其对应之
A
{\displaystyle A}
的行列式大于零。最后一个例子,即三维空间中刚体 的运动组成的群(旋转和平移),刚体的运动在机器人学中尤为常用[3] 。
如果有一固定点,我们可以将其当成原点,则仿射变换被缩还到一线性变换。这使得变换更易于分类与理解。举例而言,将一变换叙述为特定轴的旋转,相较于将其形容为平移与旋转的结合,更能提供变换行为清楚的解释。只是,这取决于应用与内容。
实例
实数之仿射变换
函数f : R → R , f (x ) = mx + c ,其中m 与c 为常数,此即为一般之仿射变换。
有限域的仿射变换
以下等式表示了有限域 (28 )中的仿射变换:
{
a
′
}
=
M
{
a
}
⊕
{
v
}
,
{\displaystyle \{\,a'\,\}=M\{\,a\,\}\oplus \{\,v\,\},}
此处[M]为矩阵 且 {v} 为向量 :
:
M
{
a
}
=
[
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
]
{\displaystyle 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
}
=
[
1
1
0
0
0
1
1
0
]
.
{\displaystyle \{\,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
⊕
a
4
⊕
a
5
⊕
a
6
⊕
a
7
⊕
1
=
0
⊕
0
⊕
0
⊕
1
⊕
1
⊕
1
=
1
{\displaystyle 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
⊕
a
1
⊕
a
5
⊕
a
6
⊕
a
7
⊕
1
=
0
⊕
1
⊕
0
⊕
1
⊕
1
⊕
1
=
0
{\displaystyle 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
⊕
a
1
⊕
a
2
⊕
a
6
⊕
a
7
⊕
0
=
0
⊕
1
⊕
0
⊕
1
⊕
1
⊕
0
=
1
{\displaystyle 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
⊕
a
1
⊕
a
2
⊕
a
3
⊕
a
7
⊕
0
=
0
⊕
1
⊕
0
⊕
1
⊕
1
⊕
0
=
1
{\displaystyle 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
⊕
a
1
⊕
a
2
⊕
a
3
⊕
a
4
⊕
0
=
0
⊕
1
⊕
0
⊕
1
⊕
0
⊕
0
=
0
{\displaystyle 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
⊕
a
2
⊕
a
3
⊕
a
4
⊕
a
5
⊕
1
=
1
⊕
0
⊕
1
⊕
0
⊕
0
⊕
1
=
1
{\displaystyle 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
⊕
a
3
⊕
a
4
⊕
a
5
⊕
a
6
⊕
1
=
0
⊕
1
⊕
0
⊕
0
⊕
1
⊕
1
=
1
{\displaystyle 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
⊕
a
4
⊕
a
5
⊕
a
6
⊕
a
7
⊕
0
=
1
⊕
0
⊕
0
⊕
1
⊕
1
⊕
0
=
1.
{\displaystyle 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}。
平面几何之仿射变换
在 ℝ2 ,左方所示之变换即为以下映射:
[
x
y
]
↦
[
0
1
2
1
]
[
x
y
]
+
[
−
100
−
100
]
{\displaystyle {\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}}}
将原红色三角形之三个顶点 作变换后给出了新蓝色三角形的三个顶点。事实上,所有三角形皆可由仿射变换来达成,所有平行四边形也可以,但一般四边形不行。
参看