结论:齐次坐标在仿射变换中的使用非常方便。
“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”—— F.S. Hill, JR。
- 在三维情形下:我们写出(1,3,6),谁知道这代表一个点还是三维空间的一个向量呢?
解决这个问题的方法,就是在三维基础上再加一个维度。
对于点,加上1,也就变成了(1,3,6,1);
对于向量,加上0,也就变成了(1,3,6,0)。
值得注意的是,对于一个点,乘上任意的尺度,这个点的表示不变,例如w(1,3,6,1)->(1w,3w,6w,w),当需要变回非奇次坐标时,除以w,然后将最后一维去掉即可。
- 奇次坐标的表示也可以很方便的表示无穷远点,无穷远点可以这么理解,两条平行线,它们的交点就是无穷远点。
例如:
直线1:ax + by + c = 0,其方向向量为l
直线2:ax + by + d = 0,其方向向量为m
其交点可以表示为 二维平面上的奇次坐标 q = l × m = (d-c)(b,-a,0),忽略标量,其坐标为(b/0 , -a/0),为无穷大,可以理解为无穷远处,平行线相交于无穷远处。
由于齐次坐标使用了4个分量来表达3D概念,使得平移变换可以使用矩阵进行,从而如F.S. Hill, JR所说,仿射(线性)变换的进行更加方便。由于图形硬件已经普遍地支持齐次坐标与矩阵乘法,因此更加促进了齐次坐标使用,使得它似乎成为图形学中的一个标准。[1]
- 方便的在欧式变换时表示旋转和平移
我们在表示欧式变化时,表达一次旋转和平移还好,可以直接用a' = R*a + t表示;
但是如果有两次旋转和平移的话,分别为R1, t1 和 R2,t2,分别得到:b = R1*a + t1, c = R2*b + t2。
最终的结果 c = R2*(R1*a + t1) + t2。
这样的话,在多次变换的情况下,表示起来就会很复杂。
但是如果采用奇次坐标,可以表示成如下形式:
这样的话,在多次变换过程中,就可以方便的用乘法表示平移和旋转。
波浪号表示奇次坐标。
[1] 参考公众号计算机视觉life,地址:https://mp.weixin.qq.com/s/0QHxvTcH4H072U64uDK_2A