8 几何变换之仿射变换与投影变换
在计算机图形学中,几何变换是将物体从一个空间位置转换到另一个空间位置的方法。在上一篇中,我们详细讨论了平移、旋转与缩放等基本几何变换。而在本篇中,我们将深入探讨 仿射变换
和 投影变换
。
仿射变换
什么是仿射变换?
仿射变换
是一种更为广泛的变换,能够保持点、直线和面之间的关系。具体来说,仿射变换不仅可以进行平移、旋转和缩放,还允许进行剪切操作。仿射变换可被描述为以下数学形式:
$$
\begin{bmatrix}
x’ \
y’ \
1
\end{bmatrix}
\begin{bmatrix}
a & b & tx \
c & d & ty \
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x \
y \
1
\end{bmatrix}
$$
其中,$\begin{bmatrix} x’ \ y’ \ 1 \end{bmatrix}$ 是变换后的坐标,$a, b, c, d$ 描述了线性变换的部分,$tx, ty$ 是平移量。
仿射变换的示例
考虑一个简单的例子,我们有一个正方形的顶点坐标:
- A(1, 1)
- B(1, 3)
- C(3, 3)
- D(3, 1)
我们希望对它进行 平移
和 缩放
,具体变换矩阵如下:
$$
\begin{bmatrix}
2 & 0 & 1 \
0 & 2 & 1 \
0 & 0 & 1
\end{bmatrix}
$$
在这里,我们对x坐标进行2倍缩放,并对每个点进行平移1个单位。
代码示例
以下是用 Python 结合 NumPy 实现仿射变换的代码示例:
1 | import numpy as np |
投影变换
什么是投影变换?
投影变换
是将三维物体映射到二维平面上的一种变换。投影变换会将物体的深度信息进行压缩,其通用矩阵形式如下所示:
$$
\begin{bmatrix}
x’ \
y’ \
w
\end{bmatrix}
\begin{bmatrix}
f & 0 & 0 \
0 & f & 0 \
0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
x \
y \
z
\end{bmatrix}
$$
这里,$f$ 是焦距,$w$ 是齐次坐标的维度。
投影变换的示例
假设我们有一个三角形在三维空间中的顶点坐标为:
- P1(1, 1, 1)
- P2(1, -1, 1)
- P3(-1, -1, 1)
我们想要将这个三角形投影到二维平面上。
代码示例
以下是三维到二维投影的代码示例:
1 | # 定义三角形的顶点 |
总结
在本篇中,我们介绍了 仿射变换
和 投影变换
的基本概念和实现。仿射变换
通过统一的矩阵表示多种变换,而 投影变换
则负责将三维场景映射到二维空间。通过实际案例和代码示例,我们能够更直观地理解这些变换的操作及其效果。
在下一篇中,我们将深入探讨 齐次坐标
,这一重要概念将为我们提供更强大的变换工具。
8 几何变换之仿射变换与投影变换