📜  二维变换的矩阵表示(1)

📅  最后修改于: 2023-12-03 15:21:40.482000             🧑  作者: Mango

二维变换的矩阵表示

在计算机图形学中,二维变换常常用于图像的平移、旋转、缩放等操作,这些变换都可以用矩阵来表示。本文将介绍二维变换的矩阵表示。

平移变换

平移变换是将对象沿着给定方向移动一定的距离,被平移的物体和坐标轴的形状和大小不变。平移变换的矩阵表示如下:

$$ T = \begin{bmatrix} 1 & 0 & dx \ 0 & 1 & dy \ 0 & 0 & 1 \ \end{bmatrix} $$

其中,$dx$ 和 $dy$ 分别是在 $x$ 和 $y$ 轴上的平移距离。该矩阵表示的二维平移变换可以用如下 Python 代码实现:

import numpy as np

def translate(dx, dy):
    return np.array([
        [1, 0, dx],
        [0, 1, dy],
        [0, 0, 1]
    ])
旋转变换

旋转变换是将对象绕某一个点或者原点旋转一定的角度。旋转变换的矩阵表示如下:

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

其中,$\theta$ 表示旋转的角度,正值表示逆时针旋转,负值表示顺时针旋转。该矩阵表示的二维旋转变换可以用如下 Python 代码实现:

import numpy as np

def rotate(angle):
    return np.array([
        [np.cos(angle), -np.sin(angle), 0],
        [np.sin(angle), np.cos(angle), 0],
        [0, 0, 1]
    ])
缩放变换

缩放变换是将对象沿着坐标轴拉伸或收缩。缩放变换的矩阵表示如下:

$$ S = \begin{bmatrix} sx & 0 & 0 \ 0 & sy & 0 \ 0 & 0 & 1 \ \end{bmatrix} $$

其中,$sx$ 和 $sy$ 分别表示在 $x$ 和 $y$ 轴上的缩放比例。该矩阵表示的二维缩放变换可以用如下 Python 代码实现:

import numpy as np

def scale(sx, sy):
    return np.array([
        [sx, 0, 0],
        [0, sy, 0],
        [0, 0, 1]
    ])
组合变换

多个变换可以组合成一次变换,例如先旋转再平移,或者先缩放再旋转。多个变换的组合可以用矩阵乘法来实现。例如,先进行平移变换,再进行缩放变换,最后进行旋转变换,可以表示为:

$$ M = T \cdot S \cdot R $$

其中,$T$ 表示平移变换矩阵,$S$ 表示缩放变换矩阵,$R$ 表示旋转变换矩阵,$M$ 表示组合变换矩阵。该组合变换可以用如下 Python 代码实现:

import numpy as np

def transform(dx, dy, sx, sy, angle):
    t = translate(dx, dy)
    s = scale(sx, sy)
    r = rotate(angle)
    return t.dot(s).dot(r)

以上代码实现了对平移、缩放、旋转变换进行组合。