变换包括缩放(Scale)、非均匀缩放(Non-Uniform Scale)、(水平/垂直)镜像(Reflection)、剪切(Shear)、旋转(Rotation)和平移(Translation)等等。假如二维空间中存在一个或多个点(或多个点组成的图形/图像),我们可以对它进行一种或多种变换。
对二维空间中每个点的某种变换都可以表示为某矩阵与这个点做点乘,多种操作即多个矩阵与该点进行点乘。
变换分为线性变换和非线性变换。
综上,我们可以得出一个规律如下,即线性变换:
但是我们貌似漏了一种变换:平移。平移相对上面提到几种变换来说相对较为特殊,因为它是非线性的,即无法用一个矩阵点乘的方式来表示。
那么我们是否有别的办法将平移也纳入到线性变换体系中呢?答案是肯定的!但需要付出代价,这个代价就是齐次坐标。所谓代价是因为齐次坐标将一个原本是n维的问题拓展到了n+1维。
齐次坐标为了解决平移与线性变换不统一的问题在原先维度上新增了一个维度,比如用三个值来表示二维中的点和向量:
通过上面的矩阵与(x, y, 1)做点乘,就得到了 x = x + t_x,y = y + t_y,将平移纳入到了线性变换的体系。
但是为什么对于二维中的点加一维是用“1”来表示,而对于向量却是“0”呢?原因就是向量具有平移不变性,即向量在二维空间中,它只表示方向和长度,并不表示位置,相反点在二维空间中只能表示位置,表示不了方向和长度。而平移恰巧是对位置的变换,所以它只影响点的数值,而不影响向量的数值,这也反向证明了向量的平移不变性。
其实 1 和 0 是有意义的,上图中的 w 可以理解为他们是二维中的点或向量在三维中的投影大小,当 w 不等于 0 时,x 方向的大小在三维中表示为 x/w,y 方向同理为 y/x。试想一下,当 w 为 1 时,这个点(x, y)在 x 方向正好为 x,y 方向正好等于 y。如下图所示:
那么为什么要加上 w 不等于零的条件呢?因为 w 等于零表示不存在高一级维度,等于一表示存在。所以可以理解为齐次坐标就是利用了高一级的维度来解决了低一级维度的变换不统一的问题。试想,我们本来就是要引入一维来辅助我们进行统一,却让它等于零,这显然不合理。
我们把这种借助高维来表示的变换也叫做仿射变换。则线性变换 + 平移 = 仿射变换。
自此,我们统一了二维空间中所有变换形式,将他们纳入到了线性体系中,缩放、旋转、平移矩阵也就可以表示为如下形式。
既然可以将所有变换都表示为矩阵与点点乘(线性)的形式,变换之间进行组合时就表现出了与矩阵一致的特性:不符合交换律,符合结合律。
逆变换并不是一种新的变换形式,它与逆矩阵相对应,即在做了某种变换(如先向左旋转后再向右平移)后再逆向操作回原来的位置。这跟两个互逆矩阵点乘后的结果一致。
多个变换组合操作时,其顺序与矩阵也具有相同的属性,符合从右到左的顺序。如果要对某个点进行 A1,A2,...,An种变换,表示为矩阵则为按 An,...,A2,A1的顺序做点乘。
变换不仅可以组合,也可以进行分解,如下图所示,我们的目标是将二维平面中的某图像以其某个点(非原点)进行旋转,则可以将这一过程分解为平移,旋转,再平移的过程。同样,过程中变换的顺序是不能改变的,要符合矩阵不可交换的定律。
将上述特性,包括齐次坐标,拓展到三维空间中的点和向量的话,则表示如下:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。