为什么使用在齐次坐标下矩阵乘法能表示点平移?

First Post:
Last Update:

首先,什么是线性变换?

简化了一万倍来说,线性变换主要是在描述符合这两种性质的变换:一是要可加,二是要能数乘。
也就是说,对于空间中所有向量 ,以及任意数量 ,如果有:

符合这种规律的 A 就叫线性变换。而一次矩阵乘法正好可以代表一次线性变换。

为什么叫“线性”变换呢?感性地来说,因为它很“线”。

我们可以直观地从下面这张图看出原因:


我们可以看到,在同一直线上的点,经过同一线性变换后还在同一直线上。所以它很“线”。

另一方面,我们可以找一找最简单的线性变换:

考虑函数:

我们都知道这是一条过原点的直线。

而从另一方面想,其实这个函数对于任意一维向量(实数) , 与任意数量(实数) , 都有:

即, xy 平面上过原点的直线(正比例函数)本身就是一种从 x 轴到 y 轴的线性变换。

关于线性变换, 3blue1Brown 上有更详细更感性的介绍,大家感兴趣可以前往观看。

为什么普通的线性变换不能表示点平移?

从上面的感性介绍来看,我们知道线性变换的性质就是可加和数乘,写成等式就是:

而当两个向量都为零向量时,等式就会简化成:

解一下方程,就可以知道,对任意线性变换 A,都会有:

也就是说,不管是哪个线性变换 A ,原点经过变换后都必须只能是在原点不变。如果变换后原点的位置变了,那它就一定不是线性变换。

我们从下图也可以看出,对于切变 、伸缩 、旋转 这些经典的线性变换,变换后原点都不会变。

但是平移这种变换不一样。原点经过平移后,是一定不会还留在原点的。因此平移不是一种线性变换,自然也不能用矩阵来表示。

为什么基于齐次坐标下的线性变换就可以表示平移?

我们先来看一下齐次坐标做了些什么。

在上面传统的线性变换中,我们不会考虑向量与点的区别。一个二维坐标 既能代表那个坐标上的点,也能代表从原点到 的向量。这时,点与向量是一一对应的。

但如果要考虑平移,点与向量就不能再一一对应了,因为对向量平移没有意义(不考虑物理中力矩的场景)。
所以在齐次坐标下,我们需要区分这个坐标代表的是点还是向量。

以二维空间为例,齐次坐标就是在二维空间上加了第三个维度 w 轴,二维空间里的点在 w 轴上的值为 1 ,而二维向量在 w 轴上的值对应为 0 :

从字面上看可能还是不太明显,让我们试着把二维空间齐次坐标强行转化为三维空间坐标看看:

我们发现,原来二维空间中的点,被投射到三维空间中 w = 1 的平面上了!

这样一来,二维空间齐次坐标下的平移矩阵也很好理解了:

这不就是三维空间中在 w 轴上做切变时的变换矩阵嘛!

我们可以重点关注一下 这个向量。
从齐次坐标的定义来看,这个向量对应着二维空间中的原点 。而由矩阵乘法计算可知,经过 对应的线性变换后, 这个向量会被映射到 上。也就是说,二维空间原点 经过变换后会变为

而对于二维空间中的向量 ,其齐次坐标下 w 轴方向分量为 0 ,因此 w 轴方向上的切变并不会影响二维空间中的向量。即

而对于原来二维空间中的其他点的坐标:

其实可以理解为原点坐标再加上一个偏移向量:

而在齐次坐标下,点坐标 = 原点坐标 + 偏移向量 这一等式仍然成立:

而由于切变是线性变换,因此有:

因为切变前后偏移向量没有发生变化,因此二维空间上的点经变换后相对于原点的方向、距离都没有发生变化。由此也可得出,原先由二维空间中的点组成的图案,经齐次坐标下 w 轴的切变后,其大小、形状、方向都不会发生变化。

而这种大小、形状、方向都不变化,只有整体位置发生了变化的变换,正是我们一般所说的“平移”。因此在齐次坐标下,我们能通过线性变换(aka 矩阵乘法)表示平移。

其实 对应切变作用后各点坐标如何变化这个过程, 3Blue1Brown 的这个视频 有更直观明了的解释,大家可以参考。

总结一下

Q: 为什么普通的矩阵乘法不能表示平移?
A: 因为矩阵乘法只能表示线性变换。平移不是线性变换。

Q: 为什么在齐次坐标下的矩阵乘法又能表示平移?
A: 因为齐次坐标增加了一个维度。平移变换矩阵其实是在新增的这个维度上做切变(一种线性变换)。切变后的结果正好就是原坐标中的平移变换。

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.