计算机图形学|图形的变换矩阵

一、基本几何变换的矩阵表示

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\) 角:

  1. \(P\) 平移到原点:\(T_1 = T(-x_p, -y_p)\)
  2. 绕原点旋转:\(R = R(\theta)\)
  3. \(P\) 平移回原位置:\(T_2 = T(x_p, y_p)\)

组合矩阵:
\( M = T_1 \cdot R \cdot T_2 \)

3.2.2 对任意点缩放

对点 \(P(x_p, y_p)\) 进行缩放:

  1. \(P\) 平移到原点:\(T_1 = T(-x_p, -y_p)\)
  2. 缩放:\(S = S(S_x, S_y)\)
  3. \(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)\)

  1. 平移使直线过原点:\(T_1 = T(0, C/B)\)(假设 \(B \neq 0\)
  2. 旋转使直线与 \(X\) 轴重合:\(R_1 = R(-\alpha)\)
  3. 关于 \(X\) 轴对称:\(S_x = \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix}\)
  4. 旋转回原方向:\(R_2 = R(\alpha)\)
  5. 平移回原位置:\(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\) 为错切系数

posted @ 2025-12-19 11:00  lumiere_cloud  阅读(9)  评论(0)    收藏  举报