变换 施工中
齐次坐标(Homogeneous coordinates)
如果只用2*2矩阵,会发现无法表示二维平移这种基本变换,因此人们想到了引入一个额外的维度,约定:
表示二维坐标点; 表示二维向量。
这样平移变换可表示为:
点和向量的加减产生了四种运算,进一步说明上面的“约定”不是空穴来风:
- 点减去点,运算的结果是向量,含义就是从一个点(减数)指向另一个点(被减数)的向量,如下图左上角
; - 点与向量运算,运算的结果是点,含义其实是从该点走向量到另一个端点,如下图右上角
; - 向量与向量运算,运算的结果是向量,含义是将两向量首尾相连,没有连起的另一首和尾组成的新向量,如下图中部
; - 点加上点?我们发现相加后额外的维度值变成了2,为了让额外的维度值保持为1,人为约定下,我们约定
代表的是 。根据这个约定,两点相加得到的是两者的中点。

有了齐次坐标,我们就可以把几个基本的变换都用一个矩阵表示:
- 缩放 scale 矩阵:
; - (绕原点)旋转 rotate 矩阵:
,一种简单的方法是代入特殊点推出矩阵各项的值; - 平移 translate 矩阵:
。
线性变换加上平移变换合称为仿射变换(affine transformation)。具体来说,线性变换使得我们能够计算类似的表达式:
,仿射将其拓展至 。
同时复杂的变换可以分解为若干小变换依次完成,问题规约为矩阵分解、求逆、乘法等。举个例子,绕点c旋转,可以先把对象平移到原点