更新时间:2024-07-04 18:44
射影空间的点P对应的等价类中每个(n+1)元组是P的齐次坐标。
实投影平面可以看作是一个具有额外点的欧氏平面,这些点称之为无穷远点,并被认为是位于一条新的线上(该线称之为无穷远线)。每一个无穷远点对应至一个方向(由一条线之斜率给出),可非正式地定义为一个点自原点朝该方向移动之极限。在欧氏平面里的平行线可看成会在对应其共同方向之无穷远点上相交。给定欧氏平面上的一点(x,y),对任意非零实数 Z,三元组(xZ,yZ,Z)即称之为该点的齐次坐标。依据定义,将齐次坐标内的数值乘上同一个非零实数,可得到同一点的另一组齐次坐标。例如,笛卡儿坐标上的点 (1,2) 在齐次坐标中即可标示成 (1,2,1) 或 (2,4,2)。原来的笛卡儿坐标可透过将前两个数值除以第三个数值取回。因此,与笛卡儿坐标不同,一个点可以有无限多个齐次坐标表示法。
一条通过原点(0, 0)的线之方程可写作nx+my= 0,其中 n 及 m 不能同时为 0。以参数表示,则能写成x=mt,y= −nt。令 Z=1/t,则线上的点之笛卡儿坐标可写作(m/Z, −n/Z)。在齐次坐标下,则写成(m, −n,Z)。当 t 趋向无限大,亦即点远离原点时,Z 会趋近于 0,而该点的齐次坐标则会变成(m, −n, 0)。因此,可定义(m, −n, 0)为对应nx+my= 0这条线之方向的无穷远点之齐次坐标。因为欧氏平面上的每条线都会与透过原点的某一条线平行,且因为平行线会有相同的无穷远点,欧氏平面每条线上的无穷远点都有其齐次坐标。
概括来说:
注意,三元组(0, 0, 0)不表示任何点。原点表示为(0, 0, 1)。
有些作者会使用不同的符号表示齐次坐标,以与笛卡儿坐标相区别,如以冒号代替逗号,以 (x:y:z) 代替(x,y,z),以强调该坐标有着比例的性质。亦有以方括号代替括弧,以[x,y,z]来强调有多个坐标表示同一个点。有些作者则会同时使用冒号与方括号,如 [x:y:z]。
齐次坐标的数值若为实数,则会得出一般实投影空间内的一个点。不过,该数值可以为任意的体,特别是在复投影空间里,使用的数值为复数。例如,复投影线在齐次坐标中以两个数值表示之,称之为黎曼球面。其他的体,包括有限体,也都可以被使用。
用于投影空间的齐次坐标亦可使用除环来建立。不过,在此情况下,必须小心考虑其乘法可能是不可交换的。
《计算机图形学(OpenGL版)》的作者F.S. Hill Jr.曾说过一句话:
“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”
于是我们知道,其重要性,主要有二,其一是区分向量和点,其二是易于进行仿射变化(Affine Transformation)。
齐次坐标在电脑图形内无处不在,因为该坐标允许平移、旋转、缩放及透视投影等可表示为矩阵与向量相乘的一般向量运算。依据链式法则,任何此类运算的序列均可相乘为单一个矩阵,从而实现简单且有效之处理。与此相反,若使用笛卡儿坐标,平移及透视投影不能表示成矩阵相乘,虽然其他的运算可以。OpenGL及Direct3D图形卡均利用齐次坐标的优点,以具4个暂存器的向量处理器来实作顶点着色引擎。
例如,在透视投影里,空间中的位置与该位置至称为“投影中心”的固定点间的线相关联。该点可透过找出平面与该线之相交点被映射至该平面上。这是三维物件如何呈现于眼上的一精确表示。在最简单的情况下,投影中心会是圆点,而点会映射至平面z= 1上,如同在笛卡儿坐标上时一样。对空间内的一点(x,y,z),其线与平面相交的点为(x/z,y/z, 1)。删掉显得多余的 z 坐标,即变成(x,y,z)。在齐次坐标里,点(x,y,z)表示为(xw,yw,zw,w),且该点映射至平面上的点表示为(xw,yw,zw),因此投影可以以矩阵形成表示为
表示其他几何变转的矩阵可与此一矩阵透过矩阵乘法结合。其结果是,任何空间的透视投影都能被表示为单一个矩阵。
例如,二维点(x,y)的齐次坐标表示为(hx,hy,h)。由此可以看出,一个向量的齐次表示是不唯一的,齐次坐标的h取不同的值都表示的是同一个点,比如齐次坐标(8,4,2)、(4,2,1)表示的都是二维点(4,2)。
给出点的齐次表达式[X Y H],就可求得其二维笛卡尔坐标,即
[X Y H]→ = [x y 1], 这个过程称为归一化处理。
在几何意义上,相当于把发生在三维空间的变换限制在H=1的平面内。
那么引进齐次坐标有什么必要,它有什么优点呢?
许多图形应用涉及到几何变换,主要包括平移、旋转、缩放。以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘,综合起来可以表示为p' = m1*p+ m2(注:因为习惯的原因,实际使用时一般使用变化矩阵左乘向量)(m1旋转缩放矩阵, m2为平移矩阵, p为原向量 ,p'为变换后的向量)。引入齐次坐标的目的主要是合并矩阵运算中的乘法和加法,表示为p' = p*M的形式。即它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。
其次,它可以表示无穷远的点。n+1维的齐次坐标中如果h=0,实际上就表示了n维空间的一个无穷远点。对于齐次坐标(a,b,h),保持a,b不变,|V|=(x1*x1,y1*y1,z1*z1)^1/2的过程就表示了标准坐标系中的一个点沿直线 ax-by=0 逐渐走向无穷远处的过程。