2D仿射变换(2D Affine Transformation)
平移
我们先看平移变换:

平移变换非常简单,可以由下面的式子表示:
x′=x+txy′=y+ty
但是有一个问题,我们不能把上述式子直接用矩阵的形式表达,需要在矩阵运算后再加一个偏移量:
[x′y′]=[abcd][xy]+[txty]
📌如果只有平移,则 a,b,c,d 构成一个单位矩阵
💡思考: 平移不是线性变换,不满足X′=MX
齐次坐标
为了解决“平移变换不能够线性变换表示”的问题,将坐标或向量添加一项(以2D为例):
- 2D point = (x,y,1)T
- 2D vector = (x,y,0)T
这样,就可以用统一的X'=MX形式兼容线性变换和平移变换了:
(x′y′w′)=(10tx01ty001)⋅(xy1)=(x+txy+ty1)
💡 当前维度解决不了的问题,可以考虑升维解决。
📌 为point增加一项1,因为point移动后不再是原来的point。为vector添加一项0,是因为向量具有平移不变性,向量平移后仍然是原向量。
📌 (x,y,w)T 如果用于表达2D点,等同于(xw,yw,1)
添加项是否存在,不影响point与vector之间运算的意义:
vector+vector=vectorpoint+vector=pointpoint−point=vectorpoint+point=两点的中点(齐次坐标下)
齐次坐标的性质:
- 有 (x,y,z,1) 这样一个坐标,那么为该坐标乘以一个不为0的数 k,即 (kx,ky,kz,k),结果不变。
- 同理,给该坐标乘以坐标本身的 z 值,它仍然表示着3D中的相同点。即 (xz,yz,z2,z),结果不变。
- 例如: (1,0,0,1) 和 (2,0,0,2) 都表示 (1,0,0)
仿射变换(Affine transformation)
线性变换 + 平移 = 仿射变换
所有的仿射变换,可以以齐次坐标的形式表达:
[X′1]=[SRT01][X1]
本文出自CaterpillarStudyGroup,转载请注明出处。
https://caterpillarstudygroup.github.io/GAMES101_mdbook/