# 2D 变换
# 线性变换
# 比例变换
x′=sxy′=sy
# 比例矩阵
x′y′=s00sxy
# 比例矩阵(非均匀)
x′y′=sx00syxy
# 反射矩阵
水平反射
x′=−xy′=y
x′y′=−1001xy
# 剪切矩阵
在 y=0 时水平移位为 0
在 y=1 时水平移位为 a
垂直移位始终为 0
x′y′=10a1xy
# 旋转矩阵
Rθ=cosθsinθ−sinθcosθ
# 相同维度线性变化
x′=ax+byy′=cx+dyx′y′=acbdxyx′=Mx
# 齐次坐标
添加第三个坐标,有点 (x,y,1)T ,向量 (x,y,0)T ,则有:
- 点 - 点 = 向量
- 向量 向量 = 向量
- 点 + 向量 = 点
- 点 + 点 = 两点的中点
在齐次坐标中,xyw 都视作x/wy/w1,其中 w=0
# 仿射变换
仿射变化 = 线性变换 + 平移
x′y′=acbd⋅xy+txty
使用齐次坐标
x′y′1=ac0bd0txty1⋅xy1
平移
S(sx,sy)=sx000sy0001
旋转
R(α)=cosαsinα0−sinαcosα0001
变换
R(α)=100010txty1
# 逆变换
M−1 是矩阵 M 在几何意义上的变换的逆
# 变换合成
矩阵相乘不满足结合律,例如,先旋转再平移和先平移再旋转所得结果不一样
仿射变换序列A1,A2,A3……
- 通过矩阵乘法组成
- 对性能非常重要
- 预乘 n 个矩阵以获得表示组合变换的单个矩阵
An(...A2(A1(x)))=An...A2A1⋅xy1
# 分解复杂的变换
如何围绕给定点 c 旋转?
- 将中心平移到原点
- 旋转
- 向后平移
T(c)⋅R(α)⋅T(−c)
# 3D 变换
3D 也使用齐次坐标:
- 3D 的点:(x,y,z,1)T
- 3D 的向量:(x,y,z,0)T
通常,(x,y,z,w) 是一个 3D 点 (x/w,y/w,z/w)
3D 变换通常使用 4×4 矩阵进行仿射变换