出处: https://youtu.be/AheaTd_l5Is?si=zQeeLJukyC9xBs_q
大家好。在这段视频中,我们将学习仿射变换。你们都知道矩阵是什么。它们将一个向量乘以得到一个新的向量。你可以把这个向量看作空间中的一个点。这些点描绘出一个正方形,例如,或者更复杂的形状。矩阵将所有这些点转换,创建一个新的形状,在这种情况下,是一个水平缩放的旧形状版本。每个矩阵都编码了一个不同的变换,缩放,反射,剪切或旋转。
但所有这些是如何从同一个矩阵中产生的呢?让我们逐一查看每个元素。我们从单位矩阵开始。它什么都不做。
现在,如果我们改变左上角的元素,它会在水平方向或x坐标上进行缩放。改变右下角的元素则在y方向上进行缩放。当我们使任何一个元素变为负数时,它会产生一个反射。
右上角的元素对应于水平剪切,而左下角则是垂直剪切。就是这样。
但是等等,如果这些元素只是缩放和剪切,那么旋转是从哪里来的呢?我来告诉你一个秘密。旋转基本上就是两次剪切。我们先进行水平剪切,然后进行相同量的垂直剪切。酷。这就会产生一个旋转。
事实上,这实际上是实现图像旋转的一种流行方法,因为你只需要对每一行进行不同程度的平移。然后对每一列进行平移。换句话说,你只需通过行和列的一维平移就可以完成二维旋转,而这些计算速度非常快。所以这个矩阵通过两次剪切创建了旋转。
但我们如何指定旋转的角度呢?正弦函数可以做到这一点。它将角度转换为正确的剪切量。让我们看看当改变角度时会发生什么。在旋转过程中,大小会稍微变化。所以我们需要纠正这种大小变化。事实证明,使用余弦函数进行缩放可以完全抵消大小变化。当我们把这些结合起来时,它们共同作用产生一个完美的旋转。
现在让我们来看看三维矩阵变换。不再是正方形,我们现在有一个立方体,我们将使用一个三乘三的矩阵来对其进行变换。
对角线上的元素对应于三维空间中的x、y和z方向的缩放。
其余的所有元素都是剪切。沿着x、y和z轴,总共有六个剪切
。我们可以将这些剪切和缩放组合起来,形成围绕z轴的旋转。y轴。以及x轴。
这些旋转有时被称为偏航角,俯仰角和滚转角,你可以将它们组合起来,让你的飞机朝任何方向飞行。
好了。但还有一个缺失的变换——平移,像这样的。执行二维平移的矩阵是什么?这个矩阵应该将x坐标增加一个单位。因为我们正在向右滑动,
举个例子,它应该将原点向右移动一个单位。但这不可能,因为所有矩阵都将零向量映射到自身。
这意味着二乘二矩阵无法完成二维平移。
然而,这里有一个技巧。让我们在底部添加一个1,使其成为一个三维向量。现在试着用这个三维矩阵相乘。瞧,我们实现了所需的平移。这是该效果的动画演示。
但是等等,你不是刚告诉我这个矩阵执行的是三维剪切吗?让我们更仔细地看看三维中实际发生了什么。确实,这个矩阵是沿x轴的剪切。但如果我们将立方体的其他部分隐藏,你会发现顶面只是在平移。我们看到了剪切和平移之间的联系。
在二维中,剪切会使每一行平移。在三维中也类似。如果我们把立方体切成平面,每个切片在这一年期间都会被不同程度地平移。因此,如果我们把我们的二维图像视为z=1平面上的一个面,我们现在可以使用三乘三矩阵的这些元素来进行任何二维矩阵变换和任何二维平移。
这种表示二维点的方式,即一个三维向量,称为齐次坐标。
同样的方法也可以用于更高维度。这是一个用四维矩阵表示的三维平移。希望你喜欢这段关于仿射变换的视频。