线性代数 Cheat Sheet 2-7:计算机图形学中的应用

  计算机图形学中的图形变换是与矩阵乘法紧密联系的。但是,屏幕上的物品的平移并非线性变换,因此并不直接对应于矩阵乘法。避免这一困难的标准办法是引入齐次坐标。

1. 齐次坐标

  $\mathbb{R}^2$ 中的每个点 $(x, y)$ 可以对应于 $\mathbb{R}^3$ 中的点 $(x, y, 1)$,它们位于 $xy$ 平面上方 $1$ 单位的平面上。我们称 $(x, y)$ 有其次坐标 $(x, y, 1)$。例如点 $(0, 0)$ 的齐次坐标为 $(0, 0, 1)$。点的齐次坐标不能相加,也不能乘以数,但它们可以乘以 $3 \times 3$ 矩阵来做变换。

  例如,形如 $(x, y) \mapsto (x + h, y + k)$ 的平移可以用齐次坐标写成 $(x, y, 1) \mapsto (x + h, y + k, 1)$,这个变换可用矩阵乘法来实现:

\begin{equation}
\begin{bmatrix}
1 & 0 & h \\
0 & 1 & k \\
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x \\ y \\ 1
\end{bmatrix} =
\begin{bmatrix}
x + h \\ y + h \\ 1
\end{bmatrix}
\end{equation}

  $\mathbb{R}^2$ 中任意线性变换可以通过齐次坐标乘以分块矩阵 $\begin{bmatrix}A & 0 \\ 0 & 1\end{bmatrix}$ 实现,其中 $A$ 是 $2 \times 2$ 矩阵。

2. 复合变换

  图形在计算机屏幕上的移动通常需要两个或多个基本变换,这些变换的复合相应于在使用齐次坐标时进行矩阵相乘。

3. 齐次三维坐标

  类似于二维的情形,我们称 $(x, y, z, 1)$ 是 $\mathbb{R}^3$ 中点 $(x, y, z)$ 的齐次坐标。一般地,若 $H \neq 0$,则 $(X, Y, Z, H)$ 是 $(x, y, z)$ 的齐次坐标,且

\begin{equation}
x = \frac{X}{H}, \; y = \frac{Y}{H}, \; z = \frac{Z}{H},
\end{equation}

$(x, y, z, 1)$ 的每一个非零的标量乘法得到一组 $(x, y, z)$ 的齐次坐标,例如 $(10, -6, 14, 2)$ 和 $(-15, 9, -21, -3)$ 都是 $(5, -3, 7)$ 的齐次坐标。

  类似的,形如 $(x, y, z) \mapsto (x + h, y + k, z + l)$ 的平移可以用齐次坐标写成 $(x, y, z, 1) \mapsto (x + h, y + k, z + l, 1)$,这个变换可用如下的矩阵乘法来实现:

\begin{equation}
\begin{bmatrix}
1 & 0 & 0 & h \\
0 & 1 & 0 & k \\
0 & 0 & 1 & l \\
0 & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x \\ y \\ z \\ 1
\end{bmatrix} =
\begin{bmatrix}
x + h \\ y + h \\ z + l \\ 1
\end{bmatrix}
\end{equation}

4. 透视投影

  三维物体在二位计算机屏幕上的表示方法是把它投影在一个可视平面上。为简单起见,设 $xy$ 平面表示计算机屏幕,假设某一观察者的眼睛向正 $z$ 轴看去,眼睛的位置是 $(0, 0, d)$,透视投影把每个点 $(x, y, z)$ 映射为点 $(x^*, y^*, 0)$,使这两点与观察者的眼睛位置(称为透视中心)在一条直线上。