9 齐次坐标与几何变换

在计算机图形学中,几何变换是构建和改变图形对象的基本方式。齐次坐标为我们提供了一种有效的方式来表示和计算这些变换,特别是在处理仿射变换与投影变换时。接下来,我们将详细探讨齐次坐标的概念、如何使用齐次坐标进行变换,以及具体的应用示例。

齐次坐标的基本概念

传统的 2D 坐标系中,我们使用一个点的直角坐标表示法:$(x, y)$。而齐次坐标则通过引入额外维度来对这些点进行扩展。对于 2D 空间,一个点 $(x, y)$ 的齐次坐标表示为:

$$
(x, y, w)
$$

其中,$w$ 是一个非零的缩放因子。当我们将齐次坐标转换回笛卡尔坐标时,可以通过以下公式获得:

$$
(x’, y’) = \left( \frac{x}{w}, \frac{y}{w} \right)
$$

注意:齐次坐标允许我们通过设置 $w=1$ 来表示传统坐标$(x, y)$,同时也支持 $w\neq 1$ 的情况,从而提供了更大的灵活性。

齐次坐标下的变换

在齐次坐标表达中,几何变换可以通过 矩阵乘法 来实现。对于 2D 变换,我们可以将变换用 $3 \times 3$ 矩阵表示:

$$
T = \begin{bmatrix}
a & b & tx \
c & d & ty \
0 & 0 & 1
\end{bmatrix}
$$

这里,$a$, $b$, $c$, $d$ 是线性变换的参数,而 $tx$ 和 $ty$ 是平移变换的参数。

仿射变换的齐次表示

仿射变换是由缩放、旋转、平移和剪切等变换组成的复合变换。在齐次坐标中,这可以用同一个 $3 \times 3$ 矩阵表示。例如,对于一个仿射变换,可以用以下矩阵表示:

$$
A = \begin{bmatrix}
s_x \cos(\theta) & -s_y \sin(\theta) & t_x \
s_x \sin(\theta) & s_y \cos(\theta) & t_y \
0 & 0 & 1
\end{bmatrix}
$$

其中,$s_x$ 和 $s_y$ 是在 x 和 y 轴上的缩放因子,$\theta$ 是旋转角度,$t_x$ 和 $t_y$ 是平移量。

投影变换的齐次表示

投影变换经常用于从三维空间映射到二维视图,也是齐次坐标非常重要的应用之一。对于透视投影,投影矩阵可以写成:

$$
P = \begin{bmatrix}
f & 0 & 0 & 0 \
0 & f & 0 & 0 \
0 & 0 & 0 & 1 \
0 & 0 & -\frac{1}{d} & 0
\end{bmatrix}
$$

这里,$f$ 是焦距,$d$ 是远平面的距离。

应用示例

下面用 Python 和 NumPy 来演示如何使用齐次坐标进行简单的2D变换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import numpy as np
import matplotlib.pyplot as plt

# 定义初始点
point = np.array([2, 3, 1]) # (x, y, w)

# 定义仿射变换矩阵
transformation_matrix = np.array([
[1, 0, 2], # 向右平移
[0, 1, 3], # 向上平移
[0, 0, 1]
])

# 应用仿射变换
new_point = transformation_matrix @ point

print(f"变换前的点:{point[:2]}")
print(f"变换后的点:{new_point[:2]}") # 输出将是 (4, 6)

# 绘制原点与变换后的点
plt.figure()
plt.scatter(point[0], point[1], color='blue', label='原始点 (2, 3)')
plt.scatter(new_point[0], new_point[1], color='red', label='变换后点 (4, 6)')
plt.xlim(0, 10)
plt.ylim(0, 10)
plt.legend()
plt.title("齐次坐标变换示例")
plt.grid()
plt.show()

输出解释

在这个示例中,初始点 $(2, 3)$ 通过平移变换转换为 $(4, 6)$。通过将点和变换矩阵相乘,我们可以直观地看到齐次坐标的强大!这种方法允许我们轻松处理各种变换,而不必手动计算每种变换的影响。

总结

齐次坐标是实现几何变换的重要工具。在本篇文章中,我们探讨了齐次坐标的基本概念、如何通过矩阵运算实现仿射变换与投影变换,以及具体的代码示例。掌握齐次坐标后,我们将能更好地理解后续的光照与着色模型,这对于实现更加真实的三维图形至关重要。期待下一篇的深度解析!

9 齐次坐标与几何变换

https://zglg.work/computer-graph-zero/9/

作者

AI免费学习网(郭震)

发布于

2024-08-11

更新于

2024-08-12

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论