您好,欢迎访问三七文档
齐次坐标与变换矩阵scolatic整理于2014-5-15中国矿业大学scolatic版权所有,资料收集于网上各类论坛与百科,清晰便于阅读,下载后请勿上传到网上,可以在同学朋友之类交流使用。感谢您的配合与支持!0引言所谓齐次坐标(Homogeneouscoordinates)就是用n+1个分量来表示n维坐标。例如:二维平面上的点A(x,y)用齐次坐标表示为(hx,hy,h);三维空间中的点B(x,y,z)用齐次坐标表示为(hx,hy,hz,h)。一个向量的齐次表示并不是唯一的,齐次坐标中的h取不同值表示的都是同一个点,比如(8,4,2)、(4,2,1)表示的都是二维平面上的点(4,2)。齐次坐标和原坐标之间可以相互转换,假设某个n维坐标用齐次坐标表示为:[X1,X2,„,Xn,H]对齐次坐标中的每个元素除以最后一个元素H,得到一个新的向量:[X1/H,X2/H,„,Xn/H,H/H]=[x1,x2,„,xn,1]则[x1,x2,„,xn]为原n维坐标。这一过程通常称为齐次坐标的正常化。举一个用三维向量表示二维向量的例子。假设一个二维向量用齐次坐标表示为(8,4,2),则:(8/2,4/2,2/2)=(4,2,1)。在几何意义上,相当于把发生在三维空间的变换限制在H=1的平面上。下面再举一个几个不同的齐次坐标化为同一个坐标的例子:上图中,点(1,2,3),(2,4,6)和(4,8,12)对应笛卡尔坐标中的同一点(1/3,2/3)。任意数量积的(1a,2a,3a)始终对应于笛卡尔坐标中的同一点(1/3,2/3)。因此这些点是“齐次”的,因为它们始终对应于笛卡尔坐标中的同一点。换句话说,齐次坐标描述缩放不变性(scaleinvariant)。1齐次坐标引入的来源为什么要引入齐次坐标呢?这是由使用齐次坐标在解决一些实际问题中的简便而引入的。许多图形应用涉及到几何变换,主要包括平移、旋转、缩放。以矩阵表达式来计算这些矩阵时,平移矩阵是相加,旋转和缩放则是矩阵相乘,将这些变换综合起来可以表示为:p’=pM1+M2(式中,p表示原向量,p’表示变换后的向量;M1表示旋转缩放矩阵,M2表示平移矩阵)。由于多次使用这样的变换会使方程中产生大量的代数项,为此,人们希望将这些变换对应的矩阵合并,减小方程中的项数,所以引入齐次坐标的目的主要是合并矩阵运算中的乘法和加法,使变换表示为p’=pM的形式。即它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。下面从一个角度解释齐次坐标的引入根据。假设在三维空间中讨论,对于一个向量v及坐标系oabc,坐标系的三个基分别为a、b、c。则可以找到一组坐标(va,vb,vc)将向量v用坐标系oabc的一组基a、b、c来表示。使得:v=vaa+vbb+vcc(1)而对于坐标系中的一点p,它在坐标系oabc中的坐标为:(pa,pb,pc)op=p-o=paa+pbb+pcc(2)从上面对向量和点的表达,我们可以看出:为了在坐标系中表示一个点(如上述点p),我们把这个点的位置看作是这个坐标系原点o所进行的一段位移,即一个向量p-o(有的书中把这样的向量叫做位置向量——起始于坐标原点的特殊向量),我们在表达这个向量的同时,用等价的方式表达出了点p:p=paa+pbb+pcc+o(3)(1)(3)是坐标系下表达一个向量和一个点的不同表达式。虽然都是用代数分量的形式表达向量和点,但表达一个点比表达一个向量需要额外的信息。因此如果随意写一个代数分量(1,4,7),很难知道它是向量还是一个点。现在把式(1)(3)写成矩阵的形式,则有:v=(a,b,c,o)0abcvvvp=(a,b,c,o)1abcppp这里(a,b,c,o)是坐标基矩阵,右边的列向量分别是向量v和点p在基下的坐标。这样,向量和点在同一组基下就有了不同的表达:3-D向量的第4个代数分量是0,而3-D点的第4个代数分量是1。像这种用4个代数分量表示3-D几何概念的方式就是齐次坐标表示。“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”——F.S.Hill,JR这样,上面的(1,4,7)如果写成(1,4,7,0),它就是个向量;如果是(1,4,7,1),它就是个点。下面是如何在普通坐标(OrdinaryCoordinate)和齐次坐标(HomogeneousCoordinate)之间进行转换:从普通坐标转换成齐次坐标时,如果(x,y,z)是个点,则变为(x,y,z,1);如果(x,y,z)是个向量,则变为(x,y,z,0)。从齐次坐标转换成普通坐标时,如果是(x,y,z,1),则知道它是个点,变成(x,y,z);如果是(x,y,z,0),则知道它是个向量,仍然变成(x,y,z)。2齐次坐标引入的作用2.1合并平移、旋转和缩放变换矩阵以上是通过齐次坐标来区分向量和点的方式。从中可以思考得知,对于平移T、旋转R、缩放S这3个最常见的仿射变换,平移变换只对于点才有意义,因为普通向量没有位置概念,只有大小和方向,这可以通过下面的式子清楚地看出:100010001000111TxxxTxTyyyTyTzzzTz(3)100010001000100TxxxTyyyTzzz(4)而旋转和缩放对于向量和点都有意义,读者可以用类似上面齐次表示来检测。从中可以看出,齐次坐标用于仿射变换非常方便,可以通过后续对齐次坐标的使用中慢慢体会到。此外,对于一个普通坐标的点P=(Px,Py,Pz),有对应的一族齐次坐标(wPx,wPy,wPz,w),其中w不等于零。比如,P(1,4,7)的齐次坐标有(1,4,7,1)、(2,8,14,2)、(-0.1,-0.4,-0.7,-0.1)等等。因此,如果把一个点从普通坐标变成齐次坐标,给x,y,z乘上同一个非零数w,然后增加第4个分量w;如果把一个齐次坐标转换成普通坐标,把前三个坐标同时除以第4个坐标,然后去掉第4个分量。由于齐次坐标使用了4个分量来表达3D概念,使得平移变换可以使用矩阵乘法来替代原三维矩阵中的矩阵加法,从而如F.S.Hill,JR所说,仿射(线性)变换的进行更加方便。由于图形硬件已经普遍地支持齐次坐标与矩阵乘法,因此更加促进了齐次坐标使用,使得它似乎成为图形学中的一个标准。2.2无穷远点的表示齐次坐标还可以用来表示笛卡尔坐标系中无穷远点和用来解释投影空间中两平行直线相交的问题。在欧几里得几何空间里,两条平行直线永远不会相交。但是在投影空间中,如下图中的两条铁轨在地平线处却是相交的,因为在无限远处它们看起来相交于一点。在欧几里德空间里描述2D/3D几何物体是很理想的,但投影空间里却并不见得。我们用(x,y)表示笛卡尔空间中的一个2D点,而处于无限远处的点(∞,∞)在笛卡尔坐标系中是没有意义的。但笛卡尔空间里面无法搞定这个问题(因为无限远处的点在笛卡尔空间里是没有意义的),因此数学家想出齐次坐标这个点子来了。证明:两平行直线可以相交,在笛卡尔坐标系中,对于如下两个直线方程:Ax+By+C=0Ax+By+D=0如果C≠D,两直线平行,以上方程组无解;如果C=D,那么这两条直线就是同一条直线了。下面我们用x/w,y/w代替x,y放到投影空间中来求解:00xyABCwwxyABDww00AxByCwAxByDw(5)现在我们就可以在C≠D的情况得到一组解(x,y,0),代入得(C-D)w=0,因为C≠D,所以w=0。因而,两条平行线相交于投影空间中无限远处的一点(x,y,0)。以上很好的阐释了齐次坐标的作用及运用齐次坐标的好处。其实在图形学的理论中,很多已经被封装的好的API也是很有研究的,要想成为一名专业的计算机图形学的学习者,除了知其然必须还得知其所以然。这样在遇到问题的时候才能迅速定位问题的根源,从而解决问题。2.3齐次坐标从坐标系位置的解释首先想像有个绝对不变的坐标系,记为W,然后以W为参照,建立两个坐标系O1和O2,O1的原点在W的(1,1)处,O2的原点在W的(2,2)处。那么W中的一个点P(x,y)在O1中将变为P(x-1,y-1),在O2中将变为P(x-2,y-2),这样同一个点在不同的坐标系下就具有了不同的表示。这会产生一个问题:显然,P点在二维空间的位置是唯一的,是与坐标系无关的,而不同坐标系下的表示看上去体现不了这种无关性。我们使用的是坐标系这样一个概念,坐标系忽略了坐标原点所具有的重要意义:正是坐标原点标示了该坐标系处于哪个参照位置。如果用矩阵来表示一个二维坐标系,将会是如下的形式:1001(6)其中(1,0)T表示一个基矢量,(0,1)T表示另一个基矢量,它们相互垂直,因此能利用它们标示整个二维空间。10(,)(,)01xyxy(7)这就是二维坐标的实际意义。现在考虑将坐标原点(a,b)也引入到这个矩阵表示中来:1001ab(8)我们用这个矩阵可以表示二维空间中任意位置的一个坐标系,当然,这个坐标系的基矢量可以不为(1,0)T和(0,1)T,为了和坐标系区分,我们称这种表示为标架表示。于是出现了这样的问题,如果我们仍然用(x,y)来表示点P,那么跟据乘法规则,我们无法完成其乘法。解决的办法就是:给P点添加一个尾巴,这个尾巴通常为1:P(x,y,1),这就是P的齐次坐标,利用新的齐次坐标和矩阵相乘得到的结果为:(x+a,y+b),这样同一个点在不同标架下的不同表示最终会得到同一个计算结果,它反映了这样一个事实:同一个点在不标架下的不同表示是等价的,这一点恰恰是使用坐标系无法体现出来的。显然上面那个32的矩阵和P的齐次表示相乘得到的不是齐次坐标,所以应该将它扩充成33的方阵:1000101ab(9)经过扩充的新矩阵具有一些有趣的特性:利用它可以非常轻松的实现平移、旋转以及缩放和剪切变换。3结合旋转变换矩阵的解释3.1齐次空间4D向量有4个分量,前3个是标准的x、y和z分量,第4个是w,有时称作齐次坐标。为了理解3D坐标是怎样扩展到4D坐标的,让我们先看一下2D中的齐次坐标,它的形式为(x,y,w)。想象在3D中w=1处的2D平面,实际的2D点(x,y)用齐次坐标表示为(x,y,1),对于那些不在w=1平面上的点,则将它们投影到w=1平面上。所以齐次坐标(x,y,w)映射的实际2D点为(x/w,y/w),如图1所示。因此,给定一个2D点(x,y),齐次空间中有无数多个点与之对应。所有点的形式都为(kx,ky,k),k≠0。这些点构成一条穿过齐次原点的直线。当w=0时,除法未定义,因此不存在实际的2D点。然而,可以将2D齐次点(x,y,0)解释为“位于无穷远的点”,它描述了一个方向而不是一个位置。4D坐标的基本思想相同,实际的3D点被认为是在4D中w=1“平面”上。4D点的形式为(x,y,z,w),将4D点投影到这个“平面”上得到相应的实际3D点(x/w,y/w,z/w)。w=0时4D点表示“无限远点”,它描述了一个方向而不是一个位置。图1齐次坐标演示3.2变换矩阵33变换矩阵表示的是线性变换,不包括平移。因为矩阵乘法的性质,零向量总是变换成零向量。因此,任何用矩阵乘法表达的变换都不包括平移。这很不幸,因为矩阵乘法和它的逆是一种非常方便的工具,不仅可以用来将复杂的变换组合成简单的单一变换,还可以操纵嵌入式坐标系间的关系。如果能找到一种方法将33变换矩阵进行扩展,使它能够处理平移,这将是一件多么美妙的事情啊。44变换矩阵恰好提供了一种数学上的“技巧”,使我们能够做到这一点。暂时假设w总是等于1。那么,标准3D向量[x,y,z]对应的4D向量为[x,y,z,1]。任意33变换矩阵在4D中表示为:11121
本文标题:齐次坐标与变换矩阵
链接地址:https://www.777doc.com/doc-5510327 .html