齐次坐标系

问题:两条平行线可以相交于一点

在欧氏空间(几何),同一平面的两条平行线不能相交,或永远不能相遇。这是我们都熟悉的常识。

然而,在透视空间里面,两条平行线可以相交,例如:在下图中,火车轨道离我们的视线越远,变得越窄。最后,两条平行线相交于地平线处,即无穷远处的一点。

railroad.jpg

欧氏空间(或笛卡尔空间)描述 2D / 3D 几何非常适合,但是这种方法却不适合处理透视空间的问题(实际上,欧氏几何是透视几何的一个子集合),2D 点的笛卡尔坐标可以表示为 ( x , y )

如果一个点在无穷远处,这个点的坐标将会是 ( , ) ,在欧氏空间,这变得没有意义。平行线在透视空间的无穷远处交于一点,但是在欧氏空间却不能。数学家发现了一种方法来解决这个问题。


方法:齐次坐标

August Ferdinand Möbius 引入了齐次坐标,使得在透视空间进行图形和几何计算成为可能。齐次坐标是一种使用N+1个数来代表N维坐标的方法。

为了构建 2D 齐次坐标,我们可以在现有笛卡尔坐标基础上,加一个额外的变量 w 。因此,笛卡尔坐标系内的点 ( X , Y ) 在齐次坐标系里面变成了 ( x , y , z ) ,并且有

{ X = x / w Y = y / w

比如,笛卡尔坐标系下的点(1,2)的齐次坐标可以表示为(1,2,1)。如果点(1,2)移动到无限远处,在笛卡尔坐标下它变为 ( , ) ,然后它的齐次坐标表示为(1,2,0),因为 ( 1/0,2/ 0 ) ( , ) 。注意,我们可以不用 “ “ 来表示一个无穷远处的点了。


为什么叫齐次坐标?

如上所述,为了将齐次坐标 ( x , y , z ) 转化为笛卡尔坐标 ( X , Y ) ,只需将 x y 除以 w 即可:

( x , y , w ) H o m o g e n e o u s ( x w , y w ) C a r t e s i a n

转化齐次坐标到笛卡尔坐标的过程中,我们有一个重要发现,请看下面的例子:
H o m o g e n e o u s C a r t e s i a n ( 1,2, 3 ) ( 1 3 , 2 3 ) ( 2,4, 6 ) ( 2 6 , 4 6 ) = ( 1 3 , 2 3 ) ( 4,8, 12 ) ( 4 12 , 8 12 ) = ( 1 3 , 2 3 ) ( 1 a , 2 a , 3 a ) ( 1 a 3 a , 2 a 3 a ) = ( 1 3 , 2 3 )

你会发现点 (1, 2, 3) , (2, 4, 6) 和 (4, 8, 12) 对应同一个欧氏空间点 (1/3, 2/3)。在欧氏空间中,任何标量乘积,如(1a, 2a, 3a) 对应同一个点 (1/3, 2/3) 。因此,这些点是“齐次的” (译者注:含有“同类”的意思),因为他们表示欧氏空间(或笛卡尔空间)里面的同一个点。换句话说,齐次坐标有尺度不变性。


证明:两条直线可以相交

考虑欧氏空间中的线性方程组:

{ A x + B y + C = 0 A x + B y + D = 0

我们知道如果C ≠ D,上述方程组无解。如果C=D,两条直线为同一条直线(重叠)。我们在透视空间重写上述方程式,用齐次坐标 x / w , y / w 代替 x , y ,

{ A x w + B y w + C = 0 A x w + B y w + D = 0 { A x + B y + C w = 0 A x + B y + D w = 0

现在我们有一个解 ( x , y , 0 ) ,因为 ( C D ) w = 0 ,所以 w = 0 。因此,两条直线相交于 ( x , y , 0 ) ,这个点在无穷远处。

在诸如将 3D 场景投影到 2D 平面的过程中,齐次坐标是一个非常有用和基础的计算机图形学概念。

猜你喜欢

转载自blog.csdn.net/zhuxiaoyang2000/article/details/81637129