大家好,我是前端技术分享者。今天我们将深入探讨变换矩阵的奥妙。
变换矩阵的概念源于线性代数。
我们来看一个二维向量 (x, y)。在数学中,我们常常这样表示它:
在几何学中,向量通常用一条从原点出发的箭头来表示。
向量也可以被视为一个点。当需要绘制大量向量时,过多的箭头会使画面显得混乱,因此我们选择将其简化为点。
关于向量加法:其实就是将对应位置的数值相加。在几何中,通过将多个向量的起点连接起来,其路径就是加法的结果。
数乘:也称为标量乘法,是将向量与一个常数相乘。这个过程同样是对应位置相乘。在几何学中,这表现为对向量的缩放:
理解了上述概念后,我们知道一个二维向量是由 x 轴和 y 轴上的单位向量(即 基向量)缩放后组合而成。
现在让我们来探讨今天的主题 线性变换。
线性变换的“变换”指的是一种函数,它接受一个向量并返回另一个向量。在几何学中,这表示一个向量如何从原来的位置经过(如缩放、旋转等)过程到达新的位置。
而线性变换的“线性”则表示这种变换具有一些特性。它保持直线的形状不变,即直线在变换后仍然是直线;原点始终保持在原来的位置。
从另一个角度看,线性变换可以理解为矩形的每列改变了对应基向量的值。
以之前的公式为例,我们的 (x, y) 向量是基于 i 向量 (1, 0) 和 j 向量 (0, 1) 进行数乘得到的。但是通过一个矩阵的作用,我们的 i 和 j 向量会发生变化,基于这个新的标准得到的新的值就是线性变换的输出向量。
接下来我们将介绍几种常见的变换矩阵。
缩放操作是对一个向量(或点)的 x 和 y 方向分别进行指定比例的缩放。
假设 x 方向的缩放比例为 sx,y 方向的缩放比例为 sy。简单的算法如下:
二维 2x2 缩放矩阵形式为:
进行二维矩阵运算时:
为了更好地理解,我们会在讲解平移时进一步解释使用三维缩放矩阵的原因。
三维缩放矩阵的形式为:
通过在底部和右侧添加适当的值即可得到。
平移操作是将一个向量(或点)的 x 和 y 方向分别移动一段距离。
假设 x 方向移动 dx 距离,y 方向移动 dy 距离。
在几何学中的描述为:
由于无法直接用一个二维矩阵来表示平移变换,我们需要将其升维至三维,通过额外的一个 z 轴的基向量的斜切来模拟二维中的平移。
为了进行平移操作,我们需要将输入向量升维,为其添加一个值为 1 的第三维度。
三维平移矩阵的形式为:
其运算过程为:
为了提高计算效率,我们常常使用 复合矩阵。这是一种将多个变换矩阵通过结合律计算出来的矩阵。它是多种矩阵的组。
由于平移操作的特殊性,我们通常不会使用 2x2 矩阵来表示一个完整的变换矩阵,而是使用 3x3 矩阵,以兼容平移矩阵。