2D 变换


转换是指通过应用规则将某些图形变成其他图形。我们可以有各种类型的变换,例如平移、放大或缩小、旋转、剪切等。当变换发生在 2D 平面上时,称为 2D 变换。

变换在计算机图形学中发挥着重要作用,可以重新定位屏幕上的图形并更改其大小或方向。

齐次坐标

要执行一系列变换,例如平移、旋转和缩放,我们需要遵循一个顺序过程 -

  • 平移坐标,
  • 旋转平移后的坐标,然后
  • 缩放旋转坐标以完成复合变换。

为了缩短这个过程,我们必须使用 3×3 变换矩阵来代替 2×2 变换矩阵。要将 2×2 矩阵转换为 3×3 矩阵,我们必须添加一个额外的虚拟坐标 W。

这样,我们就可以用3个数字而不是2个数字来表示该点,这称为齐次坐标系。在这个系统中,我们可以用矩阵乘法来表示所有的变换方程。任何笛卡尔点 P(X, Y) 都可以通过 P' (X h , Y h , h)转换为齐次坐标。

翻译

平移将对象移动到屏幕上的不同位置。您可以通过将平移坐标 (t x , t y ) 添加到原始坐标 (X, Y) 来获得新坐标 (X', Y'),从而平移 2D 中的点。

翻译

从上图中,你可以写出 -

X' =​​ X + t x

Y' = Y + y

(t x , t y ) 对称为平移向量或平移向量。上述方程也可以使用列向量来表示。

$P = \frac{[X]}{[Y]}$ p' = $\frac{[X']}{[Y']}$ T = $\frac{[t_{x}]}{[ t_{y}]}$

我们可以将其写为 -

P' = P + T

回转

在旋转中,我们将物体从其原点旋转特定的角度 θ (theta)。从下图中我们可以看出,点 P(X, Y) 与水平 X 坐标的夹角为 φ,距原点的距离为 r。

假设您想将其旋转角度 θ。旋转到新位置后,您将得到一个新点P'(X',Y')。

回转

使用标准三角函数,点 P(X, Y) 的原始坐标可以表示为 -

$X = r \, cos \, \phi ...... (1)$

$Y = r \, sin \, \phi ...... (2)$

同样,我们可以将点 P' (X', Y') 表示为 -

${x}'= r \: cos \: \left ( \phi \: + \: \theta \right ) = r\: cos \: \phi \: cos \: \theta \: − \: r \ : sin \: \phi \: sin \: \theta ....... (3)$

${y}'= ​​r \: sin \: \left ( \phi \: + \: \theta \right ) = r\: cos \: \phi \: sin \: \theta \: + \: r \ : sin \: \phi \: cos \: \theta ....... (4)$

将式(1)、(2)分别代入(3)、(4),可得

${x}'= x \: cos \: \theta − \: y \: sin \: \theta $

${y}'= ​​x \: sin \: \theta + \: y \: cos \: \theta $

将上式表示为矩阵形式,

$$[X' Y'] = [XY] \begin{bmatrix} cos\theta & sin\theta \\ −sin\theta & cos\theta \end{bmatrix}OR $$

P' = P 。右

其中 R 是旋转矩阵

$$R = \begin{bmatrix} cos\theta & sin\theta \\ −sin\theta & cos\theta \end{bmatrix}$$

旋转角度可正可负。

对于正旋转角度,我们可以使用上面的旋转矩阵。然而,对于负角度旋转,矩阵将发生如下变化 -

$$R = \begin{bmatrix} cos(−\theta) & sin(−\theta) \\ -sin(−\theta) & cos(−\theta) \end{bmatrix}$$

$$=\begin{bmatrix} cos\theta & −sin\theta \\ sin\theta & cos\theta \end{bmatrix} \left (\because cos(−\theta ) = cos \theta \; and\; sin(−\theta ) = −sin \theta \right )$$

缩放

为了改变对象的大小,使用缩放变换。在缩放过程中,您可以扩大或压缩对象的尺寸。可以通过将对象的原始坐标乘以缩放因子来实现缩放,以获得所需的结果。

我们假设原始坐标为 (X, Y),缩放因子为 (S X , S Y ),生成的坐标为 (X', Y')。这可以用数学方式表示,如下所示 -

X' =​​ X 。S X Y' = Y 。SY _

缩放因子S X、S Y分别在X和Y方向上缩放对象。上述方程也可以用矩阵形式表示如下 -

$$\binom{X'}{Y'} = \binom{X}{Y} \begin{bmatrix} S_{x} & 0\\ 0 & S_{y} \end{bmatrix}$$

或者

P' = P 。S

其中 S 是缩放矩阵。缩放过程如下图所示。

缩放前 缩放后

如果我们为缩放因子 S 提供小于 1 的值,那么我们可以减小对象的大小。如果我们提供大于 1 的值,那么我们可以增加对象的大小。

反射

反射是原物体的镜像。换句话说,我们可以说这是一个180°的旋转操作。在反射变换中,物体的大小不会改变。

下图分别显示了相对于 X 轴和 Y 轴以及相对于原点的反射。

反射 反射线

剪切

使物体形状倾斜的变换称为剪切变换。有两种剪切变换X-ShearY-Shear。一个移动 X 坐标值,另一个移动 Y 坐标值。然而; 在这两种情况下,只有一个坐标更改其坐标,而其他坐标则保留其值。剪切也称为倾斜

X-剪切

X 剪切保留 Y 坐标并对 X 坐标进行更改,这会导致垂直线向右或向左倾斜,如下图所示。

X-剪切

X-Shear 的变换矩阵可以表示为 -

$$X_{sh} = \begin{bmatrix} 1& shx& 0\\ 0& 1& 0\\ 0& 0& 1 \end{bmatrix}$$

Y' = Y + Sh y。X

X' =​​ X

Y 剪力

Y 剪切保留 X 坐标并更改 Y 坐标,这会导致水平线转变为向上或向下倾斜的线,如下图所示。

Y 剪力

Y 剪切力可以用矩阵表示为 -

$$Y_{sh} \begin{bmatrix} 1& 0& 0\\害羞& 1& 0\\ 0& 0& 1 \end{bmatrix}$$

X' =​​ X + Sh x。是

Y' = Y

复合变换

如果平面 T1 的变换之后是第二平面变换 T2,则结果本身可以由单个变换 T 表示,该变换 T 是按该顺序采取的 T1 和 T2 的组合。这可写为 T = T1∙T2。

复合变换可以通过变换矩阵的级联获得组合变换矩阵来实现。

组合矩阵 -

[T][X] = [X] [T1] [T2] [T3] [T4] …. [Tn]

其中 [Ti] 是以下任意组合

  • 翻译
  • 缩放
  • 剪毛
  • 回转
  • 反射

变换顺序的改变会导致不同的结果,因为一般矩阵乘法不是累积的,即 [A] 。[B] ≠ [B] 。[A] 和乘法顺序。组合变换的基本目的是通过对一个点应用单个组合变换来获得效率,而不是一个接一个地应用一系列变换。

例如,要围绕任意点 (X p , Y p )旋转对象,我们必须执行三个步骤 -

  • 将点 (X p , Y p ) 平移到原点。
  • 绕原点旋转它。
  • 最后,将旋转中心平移回原来的位置。