计算机图形学-仿射变换Transformation

185 阅读6分钟

仿射变换(Transformation)

基本介绍

仿射变换是一种在几何中研究的空间变换方法,它结合了线性变换和平移变换。简单来说,"仿射变换"可以理解为:“线性变换”加上“平移”。 仿射变换可以通俗地想象为在几何图形上进行的一些变形操作,但这些操作会保持图形的基本性质不变。

仿射变换包括如下所有变换,以及这些变换任意次序次数的组合

image.png

仿射变换中最常用的有四种基本操作

1.  平移(translate)

2.  缩放(scale)

3.  旋转(rotate)

4.  剪切(skew)

特别说明

在二维空间中进行仿射变换,包括平移操作,理论上可以使用二维矩阵。然而,在实际应用中,使用三维矩阵(即使在二维空间中)有几个重要原因:

1.  统一性:在计算机图形学和线性代数中,使用三维矩阵提供了一种统一的方式来表示和应用仿射变换。无论是平移、旋转、缩放还是剪切,都可以用同一个格式的矩阵来表示,这简化了变换矩阵的构造和应用。

2.  齐次坐标:在齐次坐标系中,点 𝑃(𝑥,𝑦) 被表示为 (𝑥,𝑦,1)。这种表示允许我们使用相同的矩阵乘法来处理点和向量,以及执行各种变换,包括平移。由于平移不是一个线性变换,它不能通过二维矩阵乘法直接表示,但通过使用齐次坐标,我们可以构造一个三维平移矩阵来实现这一点。

3.  矩阵乘法:在变换的组合中,例如先进行旋转再进行平移,使用三维矩阵可以方便地将不同的变换矩阵相乘,得到一个总的变换矩阵。这种矩阵乘法的链式结构对于实现复杂的变换非常有用。

4.  扩展性:虽然在二维空间中操作,但使用三维矩阵为将来可能的扩展提供了便利。例如,如果我们需要将二维变换扩展到三维空间,使用三维矩阵可以无缝过渡,而不需要重新设计变换矩阵。

5.  兼容性:许多图形处理库和数学软件包都是基于三维或更高维度的矩阵设计的。使用三维矩阵可以确保与这些库和软件包的兼容性,简化编程和实现过程。

6.  简化计算:在实际计算中,即使在二维空间中,也常常使用三维矩阵来简化计算过程。这是因为现代计算机和图形硬件通常都是基于三维或四维向量和矩阵进行优化的。

以缩放操作为说明:

缩放操作可以用一个 2x2 矩阵来表示,即缩放矩阵 𝑆:

image.png

如上所述,在计算机图形学中,为了统一处理点和向量,通常使用齐次坐标系。在齐次坐标系中,一个二维点 (𝑥,𝑦)被表示为一个三维向量 (𝑥,𝑦,1)。这样,我们可以利用矩阵乘法来应用变换。因此,缩放矩阵在齐次坐标系中表示为:

image.png

这里的第三个列向量全为 0,除了最后一个元素是 1,这样做是为了保持齐次坐标系中的矩阵乘法一致性。

基本操作

平移(translate)

在几何中,平移是指将一个图形从一个位置移动到另一个位置,而不改变其形状、大小或方向。 首先定义一个平移向量 t = [tx ,ty ],其中tx 和ty 分别表示沿 x 轴和 y 轴的平移距离。

1.  齐次坐标:在齐次坐标系中,一个二维点 P(x, y) 可以表示为一个三维向量 P'(x, y, 1),其中第三个分量为 1。

平移矩阵 T 可以定义为:

image.png

将点 P′ 与平移矩阵 T 相乘,得到:

image.png

执行矩阵乘法后,我们得到:

image.png

2.  转换回非齐次坐标:点 P 的坐标变化可以通过以下公式计算:

x′= x+tx

y′= y+ty

缩放(scale)

缩放是指在二维或三维空间中对对象进行放大或缩小。

首先定义两个缩放因子,sx 和 sy ,分别表示沿 x 轴和 y 轴的缩放比例。如果 sx >1,则表示沿 x 轴放大;如果 sx <1,则表示沿 x 轴缩小;同理适用于 y 轴。

1.  使用齐次坐标:在齐次坐标系中,一个二维点 P(x,y) 可以表示为一个三维向量 P′(x,y,1),其中第三个分量为 1。

缩放矩阵 S 可以定义为:

image.png

将点 P′ 与缩放矩阵 S 相乘,得到:

image.png

计算结果为:

image.png

2.  转换回非齐次坐标:点 P 的坐标变化可以通过以下公式计算:

x′= sx ⋅x

y′= sy ⋅y

旋转(rotate)

在几何上,旋转意味着将一个点绕某一点(通常是原点)按照某个角度移动。在数学上,这可以通过现象代数中的旋转矩阵来实现。

现在假设有一个点P(x,y) ,在二维空间中绕原点O(0, 0)逆时针旋转一个角度 θ。旋转后的点 P'(x', y')可以通过以下方式计算:

1.  使用齐次坐标:将点 P表示为齐次坐标 P'(x, y, 1),旋转矩阵Rθ 可以表示为:

image.png

应用旋转矩阵到点 P'上:

image.png

计算结果为:

image.png

2.  转换回非齐次坐标:点 P 的坐标变化可以通过以下公式计算:

x′= xcos(θ)−ysin(θ)

y′= xsin(θ)+ycos(θ)

注意:在实际应用中,我们通常不需要处理最后的齐次坐标分量。

剪切(skew)

剪切其实叫'倾斜'更合适。剪切变换是在不改变图形面积的情况下,将图形沿着一个轴向另一个轴方向拉伸的效果。

在二维空间中,剪切可以通过两个因子 hx 和 hy 来描述,分别表示沿 x 轴和 y 轴的剪切程度。如果 hx 不为零,图形将在 y 轴方向上倾斜;如果 hy 不为零,图形将在 x 轴方向上倾斜。

1.  使用齐次坐标:给定点 P(x, y),其齐次坐标表示为 P'(x, y, 1)。剪切矩阵 HH 可以构造为:

image.png

将点 P'与剪切矩阵 H相乘:

image.png

计算结果为:

image.png

2.  转换回非齐次坐标:由于 P'' 的第三个分量是 1,我们可以直接从 P'' 中得到剪切后的点 P'(x', y'):

x′= x+hy ⋅y

y′= hx ⋅x+y

以上的矩阵转换为图示如下

image.png