在欧式空间(笛卡尔空间)中,使用坐标描述2D/3D几何非常合适,例如2维欧式空间中的点表示为(x , y),3维空间中点表示为(x , y , z)。但是这种方法不适用于透视空间,当一个点位于无穷远处时,该点的欧氏空间坐标中会出现∞,这显然不合适,而使用齐次坐标能够很好的解决此问题。
齐次坐标就是在欧氏空间表示的基础上增加一个额外的变量w来表示原本的坐标(X,Y),并同时需要令x = Xw , y = Yw ,最终得到齐次坐标(x, y, w),w为非0变量,只有点在无穷远处时才等于0
而当该点在二维空间的无穷远处时,它的笛卡尔坐标系为(∞,∞),但是在齐次坐标系中令w = 0就能表示它在无穷处了,而不必使用∞来表示
如上图,将点(X,Y)移动到无穷远处时,可以直接使用齐次坐标(X,Y,0)来表示它。
笛卡尔坐标与齐次坐标是一对多的关系,齐次坐标族(aX,aY,a),(bX,bY,b)等等都表示笛卡尔坐标(X,Y)
齐次坐标的优点:
- 可以表示无穷远点
- 可以区分向量与点 :
普通坐标(Ordinary Coordinate)和齐次坐标(Homogeneous Coordinate)之间进行转换:
(1)从普通坐标转换成齐次坐标时
如果(x,y,z)是个点,则变为(x,y,z,1);
如果(x,y,z)是个向量,则变为(x,y,z,0)
(2)从齐次坐标转换成普通坐标时
如果是(x,y,z,1),则知道它是个点,变成(x,y,z);
如果是(x,y,z,0),则知道它是个向量,仍然变成(x,y,z) - 有利于各个坐标系之间的转换,关于这一点可以参考另一篇博客:这里 有提到为什么必须要使用齐次坐标
参考资料:
https://www.matongxue.com/madocs/244/
https://blog.csdn.net/janestar/article/details/44244849