一、仿射变换(Affine transformation)
仿射变换 = 线性变换 + 平移。用矩阵变换表示就是:,为线性变换矩阵,为位移向量。
我们可以简化上述公式的计算:
,则有:
令,则有:
由此,我们可以知道,3D空间的仿射变换可以通过4D的线性变换来完成。再更进一步,维空间的仿射变换可以由维的线性变换来完成。
我们再令,则有:
,则有:
当时,,平移部分的值都为0,也就是说平移变换失效,也就是说变成了一个3D线性变换。
当时,,相当于开启了平移变换!
因此,我们可以选择用4D坐标,来表示3D空间坐标,这样我们就可以用一个4x4矩阵乘以坐标就可以完成一般仿射变换(线性变换+平移),大大简化计算工作。
用来表示3D坐标的4D坐标,我们就叫做齐次坐标。齐次坐标的中心思想就是用高维度的简单情况来描述低维度的一般情况,实现降维打击!
在透视投影中,我们还可以接触到齐次坐标的巨大用途。
二、一般仿射变换矩阵
有了4x4矩阵的“加持”,我们终于可以构造包含平移在内的一般仿射变换矩阵。
- 一般意义上的平移
- 绕不通过原点的轴平移
- 一般意义上的缩放
- 沿不穿过原点的平面缩放
- 一般意义上的镜像
- 沿不穿过原点的平面镜像
- 一般意义上的正交投影
- 向不穿过原点的平面正交投影
注意一点,这里使用的行优先(Row Major)顺序,即使用行向量来表示坐标。因此要用矩阵右乘行向量。
基本思想:先平移到原点,再做3D线性变换,再“逆”平移回原位置。
其中矩阵3D线性变换矩阵,向量为位移向量。