跳转至

2D变换

2D线性变换

线性变换是能够用矩阵直接表示的变换,包括缩放、反射、剪切、旋转等,平移不是线性变换。

2D线性变换的基本形式是:

\[ \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} a & b \\ c & d \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} \]

缩放

  • 均匀缩放:
\[ \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} s & 0 \\ 0 & s \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} \]
  • 非均匀缩放:
\[ \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} s_x & 0 \\ 0 & s_y \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} \]

反射

  • 水平反射矩阵:
\[ \begin{pmatrix} -1 & 0 \\ 0 & 1 \end{pmatrix} \]

剪切

  • 水平剪切矩阵:
\[ \begin{pmatrix} 1 & a \\ 0 & 1 \end{pmatrix} \]
  • \(y=0\) 时水平偏移为 \(0\)\(y=1\) 时水平偏移为 \(a\)

旋转

  • 绕原点逆时针旋转 \(\theta\) 的矩阵:
\[ R(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix} \]

齐次坐标与仿射变换

齐次坐标的引入

为了能够用矩阵乘法表示平移,引入齐次坐标,为普通2D点和2D向量添加一个新的维度:

  • 2D点\((x, y, 1)^T\)
  • 2D向量\((x, y, 0)^T\)
  • 操作规则
    • 向量 + 向量 = 向量
    • 点 - 点 = 向量
    • 点 + 向量 = 点
    • 点 + 点 = 点(需归一化)

仿射变换的矩阵表示

仿射变换就是线性变换和平移的组合,可以用 \(3 \times 3\) 矩阵表示:

\[ \begin{pmatrix} x' \\ y' \\ 1 \end{pmatrix} = \begin{pmatrix} a & b & t_x \\ c & d & t_y \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} \]