仿射变换:从矩阵公式到几何性质 #
在计算机图形学,经常会遇到“仿射变换”这个概念。
平移、旋转、缩放、错切和反射,都可以统一写成仿射变换。更重要的是,仿射变换能够保持直线、平行关系、中点和重心等几何性质。
我将从二维仿射变换的基本公式出发,推导它的主要性质,并说明 B 样条曲线为什么具有仿射不变性。
1. 仿射变换的定义 #
二维平面中的仿射变换通常写成:
[x′ y′]=============[ab cd][x y]+[tx ty].展开矩阵乘法,得到:
x′=ax+by+tx, y′=cx+dy+ty.其中:
- (x,y) 是变换前的点;
- (x′,y′) 是变换后的点;
- 矩阵
A=[ab cd]控制旋转、缩放、反射和错切等线性变化;
t=[tx ty]控制平移。
因此,仿射变换可以简写为:
T(x)=Ax+t.
2. 一个具体的仿射变换 #
考虑下面的变换:
[x′ y′]=============[23 45][x y]+[1 −2].展开后为:
x′=2x+3y+1, y′=4x+5y−2.记
A=[23 45],t=[1 −2].那么:
T(x)=Ax+t.下面通过这个例子推导仿射变换的主要性质。
3. 两点之差不受平移影响 #
设平面上有两个点:
P=(x1,y1),Q=(x2,y2).它们经过仿射变换后分别为:
T(P)=AP+t, T(Q)=AQ+t.两者相减:
T(Q)−T(P)=(AQ+t)−(AP+t) =A(Q−P).所以:
T(Q)−T(P)=A(Q−P).这个公式说明,平移向量 t 在两点相减时会被抵消。
因此:
- 点的位置变化由 A 和 t 共同决定;
- 线段的方向、长度变化和平行关系主要由矩阵 A 决定。
4. 仿射变换将直线变成直线 #
一条经过点 P、方向向量为 v 的直线可以写成:
x(s)=P+sv.其中 s 是参数。
对直线上的点进行仿射变换:
T(x(s))=A(P+sv)+t =AP+sAv+t =T(P)+sAv.变换后的方程仍然具有“一个固定点加参数乘方向向量”的形式,因此它仍然是一条直线。
所以:
仿射变换将直线映射为直线。示例 #
原来的 x 轴可以表示为:
(x,y)=(s,0).代入变换:
x′=2s+1, y′=4s−2.因此变换后的点为:
(x′,y′)=(1,−2)+s(2,4).这仍然是一条直线,其方向向量由原来的 (1,0) 变成了 (2,4)。
5. 仿射变换保持平行性 #
假设两条直线的方向向量分别为:
v和
λv.因为两个方向向量成比例,所以这两条直线平行。
经过仿射变换后,它们的方向向量变为:
Av和
A(λv)=λAv.变换后的方向向量仍然成比例,因此两条直线仍然平行。
所以:
可逆仿射变换保持平行关系。这里强调“可逆”,是因为如果 A 不可逆,某个非零方向向量可能被压缩为零向量,甚至整个平面可能被压缩到一条直线上。
6. 仿射变换保持同一直线上的比例 #
设点 R 位于线段 PQ 所在的直线上,并满足:
R=(1−λ)P+λQ.当 0≤λ≤1 时,R 位于线段 PQ 内部。
对 R 进行仿射变换:
T(R)=A((1−λ)P+λQ)+t =(1−λ)AP+λAQ+t.因为:
(1−λ)+λ=1,所以平移向量可以写成:
t=(1−λ)t+λt.因此:
T(R)=(1−λ)(AP+t)+λ(AQ+t) =(1−λ)T(P)+λT(Q).所以:
T((1−λ)P+λQ)===================================(1−λ)T(P)+λT(Q).这说明仿射变换保持同一直线上的分点比例。
7. 仿射变换保持中点 #
线段 PQ 的中点为:
M=2P+Q.这相当于取:
λ=21.根据前面的结论:
T(M)====2T(P)+T(Q).所以原线段的中点,经过仿射变换后,仍然是新线段的中点。
即:
仿射变换保持中点。示例 #
取:
P=(0,0),Q=(2,0).中点为:
M=(1,0).经过变换:
T(P)=(1,−2), T(Q)=(5,6), T(M)=(3,2).而变换后两个端点的中点为:
2(1,−2)+(5,6)======================(3,2).它正好等于 T(M)。
8. 仿射变换保持重心 #
设三角形的三个顶点为 P1,P2,P3,其重心为:
G=3P1+P2+P3.经过仿射变换:
T(G)=A(3P1+P2+P3)+t =3AP1+AP2+AP3+t =3T(P1)+T(P2)+T(P3).因此:
仿射变换保持三角形的重心。更一般地,如果:
X=i=1∑nλiPi,并且:
i=1∑nλi=1,那么:
T(X)=i=1∑nλiT(Pi).这种系数之和等于 1 的线性组合称为仿射组合。
所以,仿射变换最重要的代数性质是:
仿射变换保持仿射组合。
9. 仿射变换保持凸组合 #
如果仿射组合中的系数还满足:
λi≥0,并且:
i=1∑nλi=1,那么这个组合称为凸组合。
也就是说:
X=i=1∑nλiPi位于控制点集合的凸包内。
经过仿射变换:
T(X)=i=1∑nλiT(Pi).系数没有发生改变,因此凸组合关系仍然成立。
所以仿射变换也会把一个图形的凸包映射为变换后控制点的凸包。
10. 面积如何变化 #
二维仿射变换对面积的缩放倍数,由矩阵 A 的行列式决定。
若原图形面积为 S,则变换后面积为:
S′=∣detA∣S.本例中:
A=[23 45].其行列式为:
\det A ====== # 2\cdot5-3\cdot4 -2.因此:
∣detA∣=2.这说明:
变换后的面积是原面积的两倍。行列式为负数还表示图形的方向发生反转。
例如,一个顶点按逆时针排列的三角形,经过该变换后会变成顺时针排列。
因此本例同时具有两个效果:
11. 仿射变换一般不保持长度 #
考虑原来的单位向量:
e1=[1 0].经过矩阵 A 变换后:
Ae1============[23 45][1 0]=============[2 4].原向量长度为:
∣e1∣=1.变换后的长度为:
|A\mathbf e_1| ============== # \sqrt{2^2+4^2} \sqrt{20}.长度发生了改变。
再看另一个单位向量:
e2=[0 1].变换后:
Ae2============[3 5].其长度为:
|A\mathbf e_2| ============== # \sqrt{3^2+5^2} \sqrt{34}.两个原本长度相同的单位向量,变换后的长度并不相同。
所以:
一般仿射变换不保持长度。
12. 仿射变换一般不保持角度 #
原来的两个单位向量:
e1=(1,0),e2=(0,1)互相垂直,因为:
e1⋅e2=0.经过变换后:
Ae1=(2,4), Ae2=(3,5).计算点积:
(2,4)\cdot(3,5) =============== # 2\cdot3+4\cdot5 26.由于:
26=0,所以变换后的两个方向不再垂直。
因此:
一般仿射变换不保持角度和垂直关系。
13. 仿射变换一般不保持圆 #
圆的方程为:
x2+y2=r2.经过一般的非均匀缩放、错切等仿射变换后,圆通常会变成椭圆。
例如:
x′=2x,y′=y.相当于将水平方向放大两倍。
原来的圆:
x2+y2=1会变为:
4x′2+y′2=1.这是一条椭圆。
所以:
一般仿射变换不保持圆,但会把圆锥曲线变成圆锥曲线。
14. 仿射变换何时可逆 #
仿射变换:
T(x)=Ax+t是否可逆,取决于矩阵 A 是否可逆。
在二维中,条件是:
detA=0.本例中:
detA=−2=0,因此该仿射变换可逆。
原方程为:
x′=2x+3y+1, y′=4x+5y−2.解出原坐标:
x=−25x′+23y′+211, y=2x′−y′−4.因此,每一个变换后的点 (x′,y′) 都唯一对应一个原来的点 (x,y)。
如果:
detA=0,那么变换不可逆,可能发生以下情况:
- 整个平面被压缩到一条直线上;
- 整个平面被压缩到一个点;
- 不同的原始点被映射到同一个点。
15. 仿射变换的齐次坐标表示 #
普通矩阵乘法只能直接表示线性变换,不能直接表示平移。
为了把线性变化和平移统一为一次矩阵乘法,可以使用齐次坐标。
将二维点 (x,y) 写成:
[x y 1].仿射变换可以写成:
[x′ y′ 1]=============[abtx cdty 001][x y 1].对于本文的例子:
[x′ y′ 1]=============[231 45−2 001][x y 1].使用齐次坐标后:
- 平移可以写成矩阵乘法;
- 多次仿射变换可以通过矩阵相乘进行合并;
- 更适合计算机图形学中的统一实现。
16. 常见仿射变换 #
16.1 平移 #
x′=x+tx, y′=y+ty.矩阵形式:
T(x)=Ix+t.
16.2 缩放 #
x′=sxx, y′=syy.对应矩阵:
A=[sx0 0sy].当 sx=sy 时是等比例缩放;当 sx=sy 时是非均匀缩放。
16.3 旋转 #
绕原点逆时针旋转 θ:
[x′ y′]=============[cosθ−sinθ sinθcosθ][x y].
16.4 错切 #
水平方向错切:
x′=x+ky, y′=y.对应矩阵:
A=[1k 01].
16.5 反射 #
关于 x 轴反射:
x′=x, y′=−y.对应矩阵:
A=[10 0−1].这些变换以及它们的任意组合,仍然都是仿射变换。
17. 为什么 B 样条具有仿射不变性 #
一条 p 次 B 样条曲线定义为:
C(u)=i=0∑nNi,p(u)Pi.其中:
- Pi 是控制点;
- Ni,p(u) 是 B 样条基函数。
B 样条基函数满足单位分解性质:
i=0∑nNi,p(u)=1.设仿射变换为:
T(x)=Ax+t.对曲线进行仿射变换:
T(C(u))=A(i=0∑nNi,p(u)Pi)+t =i=0∑nNi,p(u)APi+t.利用:
i=0∑nNi,p(u)=1,可以写成:
t=========i=0∑nNi,p(u)t.于是:
T(C(u))=i=0∑nNi,p(u)APi+i=0∑nNi,p(u)t =i=0∑nNi,p(u)(APi+t) =i=0∑nNi,p(u)T(Pi).因此:
T(C(u))=======i=0∑nNi,p(u)T(Pi).这说明:
先生成 B 样条曲线,再对整条曲线做仿射变换,与先对所有控制点做相同的仿射变换,再重新生成 B 样条曲线,结果完全相同。
这就是 B 样条曲线的仿射不变性。
18. 仿射变换保持哪些性质 #
仿射变换通常保持:
- 直线性;
- 共线性;
- 平行性;
- 同一直线上的比例;
- 中点;
- 重心;
- 仿射组合;
- 凸组合;
- 凸包关系。
仿射变换一般不保持:
但面积会按照统一倍数变化:
S′=∣detA∣S.
19. 仿射变换与其他几何变换的关系 #
常见变换之间可以写成如下包含关系:
刚体变换⊂相似变换⊂仿射变换⊂射影变换.刚体变换 #
保持长度和角度,包括:
相似变换 #
在刚体变换的基础上允许统一缩放,保持角度和形状。
仿射变换 #
允许非均匀缩放和错切,保持直线和平行关系,但不一定保持长度与角度。
射影变换 #
保持直线,但不一定保持平行性。例如透视摄影中,现实中的平行铁轨在图像中可能相交于消失点。
20. 总结 #
二维仿射变换的基本形式为:
T(x)=Ax+t.其中,矩阵 A 控制线性形变,向量 t 控制平移。
仿射变换最核心的性质来自两个公式。
第一个公式是:
T(Q)−T(P)=A(Q−P).它说明平移不影响两点之间的方向差。
第二个公式是:
T(i∑λiPi)================================i∑λiT(Pi),i∑λi=1.它说明仿射变换保持仿射组合。
由此可以推出:
- 直线仍然是直线;
- 平行线仍然平行;
- 中点仍然是中点;
- 重心仍然是重心;
- 同一直线上的比例保持不变;
- B 样条只需变换控制点,就能得到整条曲线的仿射变换结果。
因此,在几何建模和计算机图形学中,仿射变换之所以重要,不仅是因为它能表示多种常见变换,更因为它能够保留大量有用的几何结构。
(完)