一、仿射变换(Affine transformation

仿射变换 = 线性变换 + 平移。用矩阵变换表示就是:矩阵_仿射变换 - 图1矩阵_仿射变换 - 图2为线性变换矩阵,矩阵_仿射变换 - 图3为位移向量。
我们可以简化上述公式的计算:
矩阵_仿射变换 - 图4
矩阵_仿射变换 - 图5,则有:

矩阵_仿射变换 - 图6

矩阵_仿射变换 - 图7,则有:
矩阵_仿射变换 - 图8
由此,我们可以知道,3D空间的仿射变换可以通过4D的线性变换来完成。再更进一步,矩阵_仿射变换 - 图9维空间的仿射变换可以由矩阵_仿射变换 - 图10维的线性变换来完成。

我们再令矩阵_仿射变换 - 图11,则有:

矩阵_仿射变换 - 图12,则有:

矩阵_仿射变换 - 图13时,矩阵_仿射变换 - 图14,平移部分的值都为0,也就是说平移变换失效,也就是说变成了一个3D线性变换。

矩阵_仿射变换 - 图15时,矩阵_仿射变换 - 图16,相当于开启了平移变换!

因此,我们可以选择用4D坐标矩阵_仿射变换 - 图17,来表示3D空间坐标矩阵_仿射变换 - 图18,这样我们就可以用一个4x4矩阵乘以坐标就可以完成一般仿射变换(线性变换+平移),大大简化计算工作。
用来表示3D坐标的4D坐标,我们就叫做齐次坐标。齐次坐标的中心思想就是用高维度的简单情况来描述低维度的一般情况,实现降维打击!
在透视投影中,我们还可以接触到齐次坐标的巨大用途。

二、一般仿射变换矩阵

有了4x4矩阵的“加持”,我们终于可以构造包含平移在内的一般仿射变换矩阵。

  • 一般意义上的平移
    • 绕不通过原点的轴平移
  • 一般意义上的缩放
    • 沿不穿过原点的平面缩放
  • 一般意义上的镜像
    • 沿不穿过原点的平面镜像
  • 一般意义上的正交投影
    • 向不穿过原点的平面正交投影

注意一点,这里使用的行优先(Row Major)顺序,即使用行向量来表示坐标。因此要用矩阵右乘行向量。

基本思想:先平移到原点,再做3D线性变换,再“逆”平移回原位置。

矩阵_仿射变换 - 图19

其中矩阵矩阵_仿射变换 - 图203D线性变换矩阵,向量矩阵_仿射变换 - 图21为位移向量。