# 2D 变换

# 线性变换

# 比例变换

x=sxy=syx^\prime =sx\\\\ y^\prime =sy

# 比例矩阵

[xy]=[s00s][xy]\begin{bmatrix} x^\prime \\\\y^\prime \end{bmatrix}=\begin{bmatrix} s&0 \\\\0&s\end{bmatrix}\begin{bmatrix} x \\\\y \end{bmatrix}

# 比例矩阵(非均匀)

[xy]=[sx00sy][xy]\begin{bmatrix} x^\prime \\\\y^\prime \end{bmatrix}=\begin{bmatrix} s_x&0 \\\\0&s_y\end{bmatrix}\begin{bmatrix} x \\\\y \end{bmatrix}

# 反射矩阵

水平反射

x=xy=yx^\prime =-x\\\\ y^\prime =y

[xy]=[1001][xy]\begin{bmatrix} x^\prime \\\\y^\prime \end{bmatrix}=\begin{bmatrix} -1&0 \\\\0&1\end{bmatrix}\begin{bmatrix} x \\\\y \end{bmatrix}

# 剪切矩阵


y=0y=0 时水平移位为 00

y=1y=1 时水平移位为 aa

垂直移位始终为 00

[xy]=[1a01][xy]\begin{bmatrix} x^\prime \\\\y^\prime \end{bmatrix}=\begin{bmatrix} 1&a \\\\0&1\end{bmatrix}\begin{bmatrix} x \\\\y \end{bmatrix}

# 旋转矩阵

Rθ=[cosθsinθsinθcosθ]R_\theta=\begin{bmatrix} \cos\theta & -\sin\theta \\\\ \sin\theta & \cos\theta \end{bmatrix}

# 相同维度线性变化

x=ax+byy=cx+dy[xy]=[abcd][xy]x=Mxx^\prime=ax+by\\\\ y^\prime=cx+dy\\\\ \begin{bmatrix} x^\prime \\\\y^\prime \end{bmatrix}=\begin{bmatrix} a&b \\\\c&d\end{bmatrix}\begin{bmatrix} x \\\\y \end{bmatrix}\\\\ x^\prime=Mx

# 齐次坐标

添加第三个坐标,有点 (x,y,1)T(x,y,1)^T ,向量 (x,y,0)T(x,y,0)^T ,则有:

  • 点 - 点 = 向量
  • 向量 向量 = 向量
  • 点 + 向量 = 点
  • 点 + 点 = 两点的中点

在齐次坐标中,(xyw)\begin{pmatrix}x \\\\y\\\\w\end{pmatrix} 都视作(x/wy/w1)\begin{pmatrix}x/w \\\\y/w\\\\1\end{pmatrix},其中 w0w\not=0

# 仿射变换

仿射变化 = 线性变换 + 平移

(xy)=(abcd)(xy)+(txty)\begin{pmatrix}x^\prime \\\\y^\prime\end{pmatrix}=\begin{pmatrix}a&b \\\\c&d\end{pmatrix}\cdot\begin{pmatrix}x \\\\y\end{pmatrix}+\begin{pmatrix}t_x \\\\t_y\end{pmatrix}

使用齐次坐标

(xy1)=(abtxcdty001)(xy1)\begin{pmatrix}x^\prime \\\\y^\prime\\\\1\end{pmatrix}=\begin{pmatrix}a&b&t_x \\\\c&d&t_y\\\\0&0&1\end{pmatrix}\cdot\begin{pmatrix}x\\\\y\\\\1\end{pmatrix}

平移

S(sx,sy)=(sx000sy0001)\mathbf{S} (s_x,s_y)=\begin{pmatrix}s_x&0&0 \\\\0&s_y&0\\\\0&0&1\end{pmatrix}

旋转

R(α)=(cosαsinα0sinαcosα0001)\mathbf{R} (\alpha)=\begin{pmatrix}\cos\alpha&-\sin\alpha&0 \\\\\sin\alpha&\cos\alpha&0\\\\0&0&1\end{pmatrix}

变换

R(α)=(10tx01ty001)\mathbf{R} (\alpha)=\begin{pmatrix}1&0&t_x \\\\ 0&1&t_y\\\\0&0&1\end{pmatrix}

# 逆变换

M1M^{-1} 是矩阵 MM 在几何意义上的变换的逆

# 变换合成

矩阵相乘不满足结合律,例如,先旋转再平移和先平移再旋转所得结果不一样

仿射变换序列A1,A2,A3\mathbf{A_1},\mathbf{A_2},\mathbf{A_3}……

  • 通过矩阵乘法组成
  • 对性能非常重要
  • 预乘 nn 个矩阵以获得表示组合变换的单个矩阵

An(...A2(A1(x)))=An...A2A1(xy1)A_n(...A_2(A_1(x)))=\mathbf{A_n}...\mathbf{A_2A_1}\cdot\begin{pmatrix}x\\\\y\\\\1\end{pmatrix}

# 分解复杂的变换

如何围绕给定点 c 旋转?

  1. 将中心平移到原点
  2. 旋转
  3. 向后平移

T(c)R(α)T(c)\mathbf{T(c)\cdot R(\alpha)\cdot T(-c)}

# 3D 变换

3D 也使用齐次坐标:

  • 3D 的点:(x,y,z,1)T(x,y,z,1)^T
  • 3D 的向量:(x,y,z,0)T(x,y,z,0)^T

通常,(x,y,z,w)(x,y,z,w) 是一个 3D 点 (x/w,y/w,z/w)(x/w,y/w,z/w)

3D 变换通常使用 4×4 矩阵进行仿射变换