齐次坐标的理解

 

     一直对齐次坐标这个概念的理解不够完全,只见大部分的书中说道“齐次坐标在仿射变换中很是的方便”,而后就没有了后文,今天在一个叫作“三百年 重生”的博客上看到一篇关于透视投影变换的探讨的文章,其中有对齐次坐标有很是精辟的说明,特别是针对这样一句话进行了有力的证实:“齐次坐标表示是计算机图形学的重要手段之一,它既可以用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”—— F.S. Hill, JR。post

     因为做者对齐次坐标真的解释的不错,我就原封不动的摘抄过来:学习

     对于一个向量v以及基oabc能够找到一组坐标(v1,v2,v3),使得v = v1 a + v2 b + v3 c          1spa

 而对于一个p,则能够找到一组坐标(p1,p2,p3),使得 p – o = p1 a + p2 b + p3 c            2),blog

 

从上面对向量的表达,咱们能够看出为了在坐标系中表示一个(如p),咱们把点的位置看做是对这个基的原点o所进行的一个位移,即一个向量——p – o(有的书中把这样的向量叫作位置向量——起始于坐标原点的特殊向量),咱们在表达这个向量的同时用等价的方式表达出了点p:o + p1 a + p2 b + p3 c (3)博客

 

(1)(3)是坐标系下表达一个向量的不一样表达方式。这里能够看出,虽然都是用代数份量的形式表达向量和点,但表达一个点比一个向量须要额外的信息。若是我写出一个代数份量表达(1, 4, 7),谁知道它是个向量仍是个点!it

    咱们如今把(1)(3)写成矩阵的形式:v = (v1 v2 v3 0) X (a b c o)class

p = (p1 p2 p3 1) X (a b c o),这里(a,b,c,o)是坐标基矩阵,右边的列向量分别是向量v和点p在基下的坐标。这样,向量和点在同一个基下就有了不一样的表达:3D向量的第4个代数份量是0,而3D的第4个代数份量是1。像这种这种用4个代数份量表示3D几何概念的方式是一种齐次坐标表示。硬件

 

这样,上面的(1, 4, 7)若是写成(1,4,7,0),它就是个向量;若是是(1,4,7,1),它就是个点。下面是如何在普通坐标(Ordinary Coordinate)和齐次坐标(Homogeneous Coordinate)之间进行转换:im

(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)

 

以上是经过齐次坐标来区分向量和点的方式。从中能够思考得知,对于平移T、旋转R、缩放S3个最多见的仿射变换,平移变换只对于点才有意义,由于普通向量没有位置概念,只有大小和方向.

 

而旋转和缩放对于向量和点都有意义,你能够用相似上面齐次表示来检测。从中能够看出,齐次坐标用于仿射变换很是方便。

 

此外,对于一个普通坐标的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所说,仿射(线性)变换的进行更加方便。因为图形硬件已经广泛地支持齐次坐标与矩阵乘法,所以更加促进了齐次坐标使用,使得它彷佛成为图形学中的一个标准。

 

   以上很好的阐释了齐次坐标的做用及运用齐次坐标的好处。其实在图形学的理论中,不少已经被封装的好的API也是颇有研究的,要想成为一名专业的计算机图形学的学习者,除了知其然必须还得知其因此然。这样在遇到问题的时候才能迅速定位问题的根源,从而解决问题。

相关文章
相关标签/搜索