平移变换非常特殊。
$$ \begin{array}{l}x^{\prime}=x+t_{x} \\ y^{\prime}=y+t_{y}\end{array} $$
写出来简单,但是两个式子不能写成线性变换的形式。
$$ \left[\begin{array}{l}x^{\prime} \\ y^{\prime}\end{array}\right]=\left[\begin{array}{ll}a & b \\ c & d\end{array}\right]\left[\begin{array}{l}x \\ y\end{array}\right] $$
只能写成:
$$ \left[\begin{array}{l}x^{\prime} \\ y^{\prime}\end{array}\right]=\left[\begin{array}{ll}a & b \\ c & d\end{array}\right]\left[\begin{array}{l}x \\ y\end{array}\right]+\left[\begin{array}{l}t_{x} \\ t_{y}\end{array}\right] $$
因此平移变换并不是线性变换。
但是我们不希望将平移变换看作一个特殊的例子,那么有没有办法将缩放、错切、平移等变换用一种统一的方式来表示?
<aside> 💡 在计算机科学,永远要考虑“Trade-Off”。数据结构中不同降低时间复杂度的办法都会引入空间复杂度。如果两者都能低就很好,但更多时候是非此即彼的事情。“No Free Lunch Theory”。
</aside>
引入齐次坐标,可以通过增加一个维度来将平移变换也写成矩阵乘一个点的形式。
<aside> 💡 向量具有平移不变性,因此后面是 $(x, y, 0)$,平移变换后也不变。
</aside>
我们也可以通过 $w$ 分量来推出我们操作的结果:
Valid operation if w-coordinate of result is 1 or 0