OpenGL基本概念:齐次坐标(homogenouse coordinate)

问题的由来

在处理透视图的时候,我们经常需要用到齐次坐标。

回想一下我们初中和高中学习的坐标系,往往被称为迪卡尔坐标,也叫欧几里德坐标,这也是几何学中最基本的坐标。在该坐标系的诸多定律中,有一条就是:两条平行的直线永不相交。

然而在图像处理中,我们通常用到的透视坐标系却不是这样的,在最远处,所有的(相互平行的)直线都会汇集到一点,如下图的铁轨那样相交,在透视学术语中,这个点常常称为灭点(vanishing point)。

表示方法

齐次坐标系是用N+1个数字来表示N维坐标。比如在二维迪卡尔坐标系中的(X,Y),在齐次坐标中要写成(x, y, w)。其中,w是一个与透视距离有关的系数。换算法则是

X=x/w,  Y = y/w

例如,在迪卡尔坐标系中的一个点(2,3)在齐次坐标系中就是(2,3,1),如果这个点不断地向无穷远处沿透视线移动,在理认上的无穷远点就是(2,3,0),因为 \infty == x/0 , \infty == y/0。

齐次坐标是比例不变的,它满足透视学中无穷远处相交于一点的需要

齐次坐标是为了辅助我们处理透视图而设计的。考虑坐标上这几个点,

(2,3,1)

(4,6,2)

(8,12,4)

转换到迪卡尔坐标系上时,其结果都是(2,3),这也是为什么该坐标系被称为齐次坐标(homogeneous coordinate)的原因。

因此,你可以看到,在迪卡尔坐标系中永不相交的两条直线,如

AX + BY+C = 0;

AX + BY +D = 0;

转换到齐次坐标中时,就是

Ax + By+Cw = 0;

Ax + By +Dw = 0;

当w=0(也就是在透视图中的无穷远点)时,这两条线相交了,正好是我们在处理透视图时所需要的。

参考

【1】http://www.songho.ca/math/homogeneous/homogeneous.html

 

posted @ 2018-08-03 22:15  SpaceVision  阅读(198)  评论(0编辑  收藏  举报