Translation
平移变换非常特殊。
写出来简单,但是两个式子不能写成线性变换的形式。
只能写成:
因此平移变换并不是线性变换。
但是我们不希望将平移变换看作一个特殊的例子,那么有没有办法将缩放、错切、平移等变换用一种统一的方式来表示?
在计算机科学,永远要考虑“Trade-Off”。数据结构中不同降低时间复杂度的办法都会引入空间复杂度。如果两者都能低就很好,但更多时候是非此即彼的事情。“No Free Lunch Theory”。
引入齐次坐标,可以通过增加一个维度来将平移变换也写成矩阵乘一个点的形式。
向量具有平移不变性,因此后面是 ,平移变换后也不变。
我们也可以通过 分量来推出我们操作的结果:
Valid operation if w-coordinate of result is 1 or 0
- vector + vector = vector
- point – point = vector
- point + vector = point
- point + point = ?? (通过下面的定义,两个点相加,齐次坐标系下表示的是这两个点的中点)
我们对向量的 扩充了定义:
是二维的点 ,
Affine Transformations 仿射变换
Affine map = linear map + translation
Using homogenous coordinates:
2D Transformations
Scale
Rotation
Translation
逆变换
由上面两张图知道,复杂的变换可以由几个简单变换组合得到。
另外变换顺序是很重要的,不满足交换律。
矩阵是从右到左运算的:
矩阵没有交换律,但有结合律。
可以将 结合成一个变换矩阵。
因此我们就通过组合变换矩阵,来表示一个复杂的变换。
变量也能分解,这也有好处,例如我们希望不绕着原点,而是绕着点 C 旋转,我们可以将其平移回原点,旋转,再平移到点 C,通过分解成这些变换来达到目的。
后面三维空间沿着任意轴旋转也可以这么考虑。