索引
矩阵与变换的关系
2D变换
齐次坐标与齐次矩阵
线性变换 与 仿射变换
逆变换
复合变换
分解复合变换
3D变换
笔记
对称(reflection)
切变(shear)——或者叫做“拉拽”
旋转(rotate)
而平移就是属于仿射变换,因此与上述的一些二维变换有所不同,为了将其去特殊化,归纳为一个理论框架中,我们引入齐次坐标的概念——
我们给二维的点加入一个维度的数,令其为1;给二维的向量加入一个维度的数,令其为0,如下
那么,任何一个具有三个维度的数所构成的点(x,y,w)都可以写做(x/w,y/w,1),如下
然后我们把平移变换中的矩阵添加一个维度,变成三维矩阵,如下
↓
↓
变换后的三维坐标就是我们所要讲的齐次坐标,仿射变换也因此可以改写成线性变换,这样我们就把原本特殊的平移变换也归纳到一个框架中来了
平移(translation)
下面介绍一下线性变换与仿射变换:
这种用矩阵乘法形式表示的就是线性变换(linear transformation),
其可以写为线性表达式
而左边这种叫作仿射变换(affine transformation),会在后面带一个向量
以上这些二维变换的实质是点的坐标按照一定规则进行变化,关键在于找到变换前和变换后的坐标间的关系
-
变换的顺序
变换的先后次序会造成不同的结果(如先平移后旋转和先旋转后平移所带来的结果就不同)
这也与矩阵乘法不具有交换律的性质相一致
在实际应用中,我们把原坐标放在最右边,第一次线性变换放在它的左边,第二次线性变换放在更左边,即从右到左进行运算——
其实左侧乘上的一系列矩阵可以利用结合律将其全部先乘出来,这样就是将看起来非常繁琐复杂的变换变成了单个的矩阵进行线性变换了
-
分解复合变换(Decomposing Complex Transforms)
当旋转点不在原点时,我们可以先将旋转点平移到原点,然后进行旋转,最后将旋转后的图形整体移动到原来的位置
用矩阵表示就是
(注意是从右到左进行运算)
-
3D变换
与2D变换类似,我们可以再引入一个维度——
一个三维空间中的点也可以表示为
同样的,齐次矩阵就是——
( 可以发现最后一行依然为 [0,0,0,1]
同时,左上角的3X3矩阵其实就是表示线性变换,而添加的第四行和第四列则是仿射变换(表示平移)的尾巴部分
那么,进行该变换时,是线性变换先进行呢?还是平移先进行?
(根据仿射变换的表达式,可以发现是左侧的线性变换先进行,然后再进行平移)
)