计算机图形学|图形的变换矩阵
一、基本几何变换的矩阵表示
1.1 点与图形的矩阵表示
平面上的点可以用行向量 \([x, y]\) 或列向量 \(\begin{bmatrix} x \\ y \end{bmatrix}\) 表示。对于由 \(n\) 个点构成的图形,可以用 \(n \times 2\) 矩阵表示:
\( P = \begin{bmatrix} x_1 & y_1 \\ x_2 & y_2 \\ \vdots & \vdots \\ x_n & y_n \end{bmatrix} \)
1.2 基本变换矩阵形式
1.2.1 缩放变换
缩放变换改变图形的大小,变换矩阵为:
\( S = \begin{bmatrix} S_x & 0 \\ 0 & S_y \end{bmatrix} \)
其中 \(S_x\) 和 \(S_y\) 分别为 \(X\) 和 \(Y\) 方向的比例系数。变换公式为:
\( [x', y'] = [x, y] \cdot S = [x \cdot S_x, \quad y \cdot S_y] \)
1.2.2 旋转变换
绕原点逆时针旋转 \(\theta\) 角的变换矩阵为:
\( R = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \)
变换公式为:
\( [x', y'] = [x, y] \cdot R = [x\cos\theta - y\sin\theta, \quad x\sin\theta + y\cos\theta] \)
1.2.3 对称变换
- 关于 \(X\) 轴对称:\(T = \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix}\)
- 关于 \(Y\) 轴对称:\(T = \begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix}\)
- 关于原点对称:\(T = \begin{bmatrix} -1 & 0 \\ 0 & -1 \end{bmatrix}\)
- 关于直线 \(y=x\) 对称:\(T = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}\)
1.2.4 错切变换
- 沿 \(X\) 轴错切:\(T = \begin{bmatrix} 1 & 0 \\ c & 1 \end{bmatrix}\),其中 \(c\) 为错切系数
- 沿 \(Y\) 轴错切:\(T = \begin{bmatrix} 1 & b \\ 0 & 1 \end{bmatrix}\),其中 \(b\) 为错切系数
二、齐次坐标:统一变换的数学工具
2.1 平移变换的困境
平移变换的数学表示为:
\(
\begin{cases}
x' = x + t_x \\
y' = y + t_y
\end{cases}
\)
这种形式无法表示为 \(2 \times 2\) 矩阵乘法,与缩放、旋转等线性变换形式不统一
2.2 齐次坐标的引入
将二维点 \((x, y)\) 表示为三维向量 \((hx, hy, h)\),其中 \(h \neq 0\) 称为比例因子。标准化形式取 \(h=1\),即 \((x, y, 1)\)
2.3 齐次坐标下的变换矩阵
在齐次坐标下,所有基本变换均可统一为 \(3 \times 3\) 矩阵乘法:
2.3.1 平移变换矩阵
\( T(t_x, t_y) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ t_x & t_y & 1 \end{bmatrix} \)
变换公式:
\(
[x', y', 1] = [x, y, 1] \cdot T = [x + t_x, y + t_y, 1]
\)
2.3.2 缩放变换矩阵
\( S(S_x, S_y) = \begin{bmatrix} S_x & 0 & 0 \\ 0 & S_y & 0 \\ 0 & 0 & 1 \end{bmatrix} \)
2.3.3 旋转变换矩阵
\( R(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} \)
2.3.4 统一表示的优势
齐次坐标将所有变换统一为矩阵乘法形式:
\(
[x', y', 1] = [x, y, 1] \cdot M
\)
其中 \(M\) 为相应的 \(3 \times 3\) 变换矩阵
三、变换组合与矩阵级联
3.1 变换组合的数学原理
复杂变换可通过基本变换的组合实现。设变换序列为 \(T_1, T_2, \cdots, T_n\),则组合变换矩阵为:
\(
M = T_1 \cdot T_2 \cdot \cdots \cdot T_n
\)
注意:矩阵乘法不满足交换律,变换顺序影响最终结果
3.2 常见组合变换实例
3.2.1 绕任意点旋转
绕点 \(P(x_p, y_p)\) 旋转 \(\theta\) 角:
- 将 \(P\) 平移到原点:\(T_1 = T(-x_p, -y_p)\)
- 绕原点旋转:\(R = R(\theta)\)
- 将 \(P\) 平移回原位置:\(T_2 = T(x_p, y_p)\)
组合矩阵:
\(
M = T_1 \cdot R \cdot T_2
\)
3.2.2 对任意点缩放
对点 \(P(x_p, y_p)\) 进行缩放:
- 将 \(P\) 平移到原点:\(T_1 = T(-x_p, -y_p)\)
- 缩放:\(S = S(S_x, S_y)\)
- 将 \(P\) 平移回原位置:\(T_2 = T(x_p, y_p)\)
组合矩阵:
\(
M = T_1 \cdot S \cdot T_2
\)
3.2.3 对任意直线对称
设直线方程为 \(Ax + By + C = 0\),与 \(X\) 轴夹角为 \(\alpha = \arctan(-A/B)\):
- 平移使直线过原点:\(T_1 = T(0, C/B)\)(假设 \(B \neq 0\))
- 旋转使直线与 \(X\) 轴重合:\(R_1 = R(-\alpha)\)
- 关于 \(X\) 轴对称:\(S_x = \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix}\)
- 旋转回原方向:\(R_2 = R(\alpha)\)
- 平移回原位置:\(T_2 = T(0, -C/B)\)
组合矩阵:
\(
M = T_1 \cdot R_1 \cdot S_x \cdot R_2 \cdot T_2
\)
四、几何意义
4.1 变换矩阵的分解
任何仿射变换矩阵可分解为:
\(
M = \begin{bmatrix}
a & b & 0 \\
c & d & 0 \\
t_x & t_y & 1
\end{bmatrix}
= \begin{bmatrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
t_x & t_y & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
a & b & 0 \\
c & d & 0 \\
0 & 0 & 1
\end{bmatrix}
\)
即平移部分与线性变换部分的分离。
4.2 线性变换部分的结构
线性部分可进一步分解为:
- 旋转:由正交矩阵表示
- 缩放:由对角矩阵表示
- 错切:由三角矩阵表示
五、常见变换矩阵总结表
| 变换类型 | 齐次坐标矩阵 | 说明 |
|---|---|---|
| 平移 | \(T(t_x, t_y) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ t_x & t_y & 1 \end{bmatrix}\) | 沿 \(X\) 轴平移 \(t_x\),沿 \(Y\) 轴平移 \(t_y\) |
| 缩放 | \(S(S_x, S_y) = \begin{bmatrix} S_x & 0 & 0 \\ 0 & S_y & 0 \\ 0 & 0 & 1 \end{bmatrix}\) | \(S_x, S_y\) 为缩放因子 |
| 旋转 | \(R(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix}\) | 绕原点逆时针旋转 \(\theta\) 角 |
| 关于X轴对称 | \(M_x = \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix}\) | |
| 关于Y轴对称 | \(M_y = \begin{bmatrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}\) | |
| 关于原点对称 | \(M_o = \begin{bmatrix} -1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix}\) | |
| 关于y=x对称 | \(M_{y=x} = \begin{bmatrix} 0 & 1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix}\) | |
| X方向错切 | \(H_x(c) = \begin{bmatrix} 1 & 0 & 0 \\ c & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}\) | \(c\) 为错切系数 |
| Y方向错切 | \(H_y(b) = \begin{bmatrix} 1 & b & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}\) | \(b\) 为错切系数 |

浙公网安备 33010602011771号