本文整理了图形学中常见的二维变换方式,并介绍了齐次坐标的引入及其意义,帮助你理解如何将所有变换统一为矩阵乘法形式。
1. 缩放变换
1.1 均匀缩放
\[(x', y') = s(x, y)
\]
矩阵形式:
\[\begin{bmatrix}
x' \\
y'
\end{bmatrix}
=
\begin{bmatrix}
s & 0 \\
0 & s
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
\]
1.2 非均匀缩放(\(s_x \ne s_y\))
\[\begin{bmatrix}
x' \\
y'
\end{bmatrix}
=
\begin{bmatrix}
s_x & 0 \\
0 & s_y
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
\]
2. 对称 / 反射变换
2.1 沿 Y 轴翻转(镜像)
\[\begin{bmatrix}
x' \\
y'
\end{bmatrix}
=
\begin{bmatrix}
-1 & 0 \\
0 & 1
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
\]
效果:X 坐标取反,Y 坐标保持不变。
2.2 沿 X 轴翻转
\[\begin{bmatrix}
x' \\
y'
\end{bmatrix}
=
\begin{bmatrix}
1 & 0 \\
0 & -1
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
\]
效果:Y 坐标取反,X 坐标保持不变。
2.3 关于原点对称(中心对称)
\[\begin{bmatrix}
x' \\
y'
\end{bmatrix}
=
\begin{bmatrix}
-1 & 0 \\
0 & -1
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
\]
效果:X、Y 坐标同时取反。
2.4 关于直线 \(y=x\) 对称
\[\begin{bmatrix}
x' \\
y'
\end{bmatrix}
=
\begin{bmatrix}
0 & 1 \\
1 & 0
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
\]
效果:交换 X、Y 坐标。
3. 切变(Shear)

例如:保持 \(y\) 坐标不变,进行 \(x\) 方向切变:
\[x' = x + a y, \quad y' = y
\]
矩阵形式:
\[\begin{bmatrix}
x' \\
y'
\end{bmatrix}
=
\begin{bmatrix}
1 & a \\
0 & 1
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
\]
4. 旋转变换

默认绕原点逆时针旋转角度 \(\theta\):
\[\begin{bmatrix}
x' \\
y'
\end{bmatrix}
=
\begin{bmatrix}
\cos\theta & -\sin\theta \\
\sin\theta & \cos\theta
\end{bmatrix}
\begin{bmatrix}
x \\
y
\end{bmatrix}
\]
推导时可代入单位向量 \((1,0)\) 和 \((0,1)\)。
5. 齐次坐标与平移变换

平移不是线性变换,无法用 \(2 \times 2\) 矩阵表示。

为了解决这个问题,引入齐次坐标,将二维点 \((x, y)\) 扩展为三维向量 \((x, y, 1)\)。
5.1 齐次坐标表示
二维点:
\[(x, y) \to \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}
\]
二维向量:
\[(x, y) \to \begin{bmatrix} x \\ y \\ 0 \end{bmatrix}
\]
5.2 平移矩阵(齐次形式)
\[\begin{bmatrix}
1 & 0 & t_x \\
0 & 1 & t_y \\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x \\
y \\
1
\end{bmatrix}
=
\begin{bmatrix}
x + t_x \\
y + t_y \\
1
\end{bmatrix}
\]
6. 点与向量的运算规则
| 运算 | 结果 | 说明 |
|---|---|---|
| 向量 + 向量 | 向量 | 方向叠加 |
| 点 − 点 | 向量 | 得到方向 |
| 点 + 向量 | 点 | 平移位置 |
| 点 + 点 | ❌ | 无几何意义,但齐次坐标下可解释为中点 |
齐次坐标下:
\[A = (a_x, a_y, 1), \quad B = (b_x, b_y, 1)
\]
则:
\[A + B = (a_x + b_x, a_y + b_y, 2)
\]
归一化后得到中点:
\[\left( \frac{a_x + b_x}{2}, \frac{a_y + b_y}{2}, 1 \right)
\]
7. 仿射变换统一表示

所有变换(缩放、旋转、切变、对称、平移)都可以统一写成:
\[\text{变换结果} = \text{变换矩阵} \times \text{齐次坐标向量}
\]
这就是仿射变换的核心思想。
8. 逆变换与变换顺序
8.1 逆变换

由一个位置经过矩阵M到另一个位置,再从另一个位置回到最初位置的矩阵称为M的逆
8.2变换顺序
例如:先旋转 \(45^\circ\),再向右平移 1 个单位。
变换矩阵为:

应用顺序是从右到左:先旋转,再平移。

注意:矩阵乘法没有交换律!
9. 绕任意点旋转的分解

若要绕点 \(P(x_0, y_0)\) 旋转:
- 将 \(P\) 平移到原点
- 执行旋转
- 再将结果平移回 \(P\) 的位置
10. 三维齐次坐标
三维点 \((x, y, z)\) → 齐次坐标:
\[(x, y, z, 1)
\]
三维向量:
\[(x, y, z, 0)
\]
齐次坐标表示的实际点为:
\[\left( \frac{x}{w}, \frac{y}{w}, \frac{z}{w} \right), \quad w \ne 0
\]
三维空间中的变换与二维类似,统一为:
\[\text{变换结果} = 4 \times 4 \text{矩阵} \times \text{齐次坐标}
\]
