基于附属平行六面体空间的面心立方网格直线生成方法

文档序号:6597030阅读:288来源:国知局
专利名称:基于附属平行六面体空间的面心立方网格直线生成方法
技术领域
本发明涉及一种三维直线生成方法,特别是基于附属平行六面体空间的面心立方网格直线生成方法。
背景技术
三维直线作为计算机图形学中基本的几何元素,其生成方法是计算机图形学的重要基础,是计算机图形学及CAD最基本的方法之一,是数控机床和快速成型机控制系统中直线插补方法的数学基础。三维直线生成方法的应用领域包括物体的真实感显示,光线追踪,医学图像的三维重建,体元素绘制,计算机视觉以及立体几何造型。直线生成方法的好坏不仅直接影响图形生成与显示的效率,而且与数控加工和快速原型制造的速度和精度有直接的关系,因此,研究高效、高精度的直线生成方法,对于开发高性能的计算机数控系统具有十分重要的意义。
体素为菱形十二面体构成的三维网格称为面心立方(face-centeredcubic,简称FCC)网格,面心立方网格是二维六角网格在三维的推广。与六角网格类似,面心立方网格上的体素分布比方形网格更加紧凑和合理,在三维空间具有更好的采样性质。
面心立方网格是二维六角网格在三维的一种推广,它与方形网格相比具有如下优点 1)在面心立方网格上,每个体素只有点相邻和面相邻两种相邻关系,而方形网格除了点相邻和面相邻外,还有边相邻,因此,在面心立方网格上,为许多图像处理算法提供了更加简便的实现途径,并提高了算法的效率。
2)面心立方网格的误差小于方形网格,从而具有更好的近似效果。
3)面心立方网格的体素点分布更加合理和紧凑。面心立方网格在3D空间比方形网格具有更好的采样性质。也就是说,对于三维信号,需要较少的采样点就可以完全重构信号。从而可以节约内存空间,提高体绘制速度。
4)面心立方网格的体素更接近球面,从而面心立方网格上曲线或曲面更平滑。
5)面心立方网格更经济。即在体积相同的条件下,面心立方网格的表面积要小于方形网格。
6)在不影响体数据质量的前提下,面心立方网格将采样数据密度变为立方网格的即面心立方网格能比立方网格减少23.02%的体数据量。
面心立方网格因其良好的采样性质将在三维计算机图形学及CAD中具有较好的应用前景。
目前,国内外文献对三维直线生成方法大多集中在方形网格,主要将二维直线生成中有代表性的方法等推广到三维方形网格。2001年屠晓明等人发表于计算机辅助设计与图形学学报的论文《直线Bresenham生成算法的三维推广》,在二维直线Bresenham生成方法的基础上,利用三维直线在坐标平面内的投影,将二维直线Bresenham方法推广到三维方形网格。2007年在邓卫燕等人在浙江大学学报(工学版)发表的论文《基于直线特性和投影原理的三维直线生成算法》,通过对三维方形网格直线特性的分析,充分利用直线的方向性和对称性,结合投影原理,提出了一种基于直线特性和投影原理的三维方形网格直线生成方法。2004年王志喜等人在论文《中点画线算法的三维推广》(发表于计算机仿真)中,利用直线在两个坐标平面内的投影,将二维中点画线方法推广到三维方形网格。
上述这些直线生成方法都是针对三维方形网格,而对于具有更好采样性质的面心立方网格,缺乏相应的直线生成方法。

发明内容
本发明所要解决的技术问题在于提供一种基于附属平行六面体空间的面心立方网格直线生成方法,以提高图形系统中直线的生成效率。
为了解决上述技术问题,本发明在三维方形网格的Bresenham方法的基础上,利用附属平行六面体空间的平行六面体与面心立方网格空间的体素之间的一一对应关系生成面心立方网格直线。
本发明提供一种在三维面心立方网格中生成直线的方法,其步骤为 首先,建立离散面心立方网格空间的附属平行六面体空间; 然后,分析面心立方网格空间体素及其对应的附属平行六面体之间的邻接关系; 再次,以直线起点为当前平行六面体,利用三维方形网格直线生成Bresenham方法,在平行六面体空间决定下一步所选取的平行六面体; 接着,根据当前平行六面体和选取的下一个平行六面体的相邻关系和对应体素的相邻关系,决定是否需要增加体素并选取合适的体素; 最后,若还没到达终点,则继续选取下一个平行六面体和相应体素以及是否需要增加体素,直到到达终点。
本方法应用简单的判断公式只涉及到整数运算;除了在一步生成三个体素的时候需要2次整数乘法运算外,其余的只用到整数加法、减法、移位、比较运算,因而没有累计误差,本方法的时间复杂度为O(N),这里N为体素个数。
面心立方网格生成的直线与方形网格生成的直线比较,在相同质量的条件下,体素数量更少,生成的直线更平滑。该方法为基于面心立方网格的真实感显示,体绘制,光线追踪,消除隐藏线面及三维重建等技术提供了基础。


图1面心立方坐标系统的坐标轴图 图2菱形十二面体和其相应的平行六面体图 图3面心立方网格直线生成流程图 图4三维平行六面体空间的Bresenham方法示意图 五具体实施例方式 1、建立离散面心立方网格空间的附属平行六面体空间 由菱形十二面体为体素构成的三维网格与传统的方形网格不同,菱形十二面体构成的离散空间N中只存在点相邻和面相邻,不存在边相邻的情形。在离散空间N中,如图1所示,我们按如下方法构造面心立方坐标系统选取一个体素中心定义为坐标原点O,坐标原点O的所有坐标值为0,即O=(0,0,0)。然后确定三个坐标轴,考虑坐标原点体素(菱形十二面体)的一个有三个相邻面的顶点(即度为3的顶点),过原点且分别垂直于这三个相邻面的直线为坐标轴Ox,Oy和Oz。
我们可以为离散面心立方空间N定义相应的附属平行六面体空间N1。N中的每个体素h(x,y,z)都对应一个N1的平行六面体p(x,y,z)。p(x,y,z)称为h(x,y,z)的附属平行六面体,它们具有相同的中心,并且平行六面体p(x,y,z)的边为空间N的基向量u,v和w,如见图2所示。按这种方法定义的N1和N具有相同的中心和基向量。2、面心立方网格空间体素及其对应的附属平行六面体之间的邻接关系 下面分析构成空间N和N1的体素之间的关系。记h(x,y,z)为N的体素且p(x,y,z)为与之对应的N1中的平行六面体。可以得出如下结论平行六面体p(x,y,z)有26个相邻平行六面体,其中6个与p(x,y,z)面相邻,12个与p(x,y,z)边相邻,其余8个与p(x,y,z)点相邻。根据对称性,相邻的两个平行六面体有13种不同的坐标对,分别对应于表1的13行,由表中可以看出,面相邻的体素坐标对有6种(由于对称性,对应于12个面相邻体素),点相邻体素坐标对有3中(由于对称性,对应于6个点相邻体素),不相邻的体素坐标对有4种,其中对应于边相邻的平行六面体3种(由于对称性,对应于6个边相邻平行六面体),点相邻的平行六面体1种(由于对称性,对应于2个点相邻平行六面体)。
表1面心立方网格体素及其对应的平行六面体空间平行六面体之间的邻接关系
对于体素不相邻的情形,需要增加体素来连接这两个不相邻的体素。若相应的两个平行六面体为边相邻的情形,需要增加1个体素来连接体素。若相应的两个平行六面体为点相邻的情形,需要增加2个体素来连接体素,此时坐标对为(x,y,z)和(x+1,y+1,z+1)。
注意到有三种选择h(x+1,y,z),h(x,y+1,z)和h(x,y,z+1),分别对应三个平行六面体p(x+1,y,z),p(x,y+1,z)和p(x,y,z+1)。要在这三个平行六面体中选取一个使其与直线的距离最小。我们根据判断变量eyx和ezx的大小来选择,eyx和ezx的初始化和递增公式详见“面心立方网格上的直线生成方法”的步骤B。首先在xy平面由eyx<Δy是否成立决定y是否先变化,然后在xz平面由ezx<Δz是否成立决定z是否先变化。根据eyx和ezx的大小有以下四种情形 1)若eyx<Δy且ezx<Δz,则选取平行六面体p(x+1,y,z)(体素h(x+1,y,z))。
2)若eyx<Δy且ezx>=Δz,则选取平行六面体p(x,y,z+1)(体素h(x,y,z+1))。
3)若eyx>=Δy且ezx<Δz,则选取平行六面体p(x,y+1,z)(体素h(x,y+1,z))。
4)若eyx>=Δy且ezx>=Δz,则选取平行六面体p(x,y+1,z)或p(x,y,z+1)(体素h(x,y+1,z)或h(x,y,z+1))。
首先考虑情形1),eyx<Δy且ezx<Δz,则选取的体素h(x+1,y,z)与h(x+1,y+1,z+1)还不相邻,连接它们的体素可能为h(x+1,y,z+1)或h(x+1,y+1,z)。通过分析,我们发现变量ezy=ezxΔy-eyxΔz的符号决定了该选取哪个连接体素若ezy为正,则应选取h(x+1,y,z+1),即体素h(x,y,z)的紧接着的三个体素为h(x+1,y,z),h(x+1,y,z+1),h(x+1,y+1,z+1);否则体素h(x,y,z)的紧接着的三个体素为h(x+1,y,z),h(x+1,y+1,z),h(x+1,y+1,z+1)。
现在考虑情形2),eyx<Δy且ezx>=Δz,则选取的体素h(x,y,z+1)与h(x+1,y+1,z+1)还不相邻,连接它们的体素可能为h(x+1,y,z+1)或h(x,y+1,z+1),但由于eyx<Δy,只能选取h(x+1,y,z+1)。于是体素h(x,y,z)的紧接着的三个体素为h(x,y,z+1),h(x+1,y,z+1),h(x+1,y+1,z+1)。
现在考虑情形3),eyx>=Δy且ezx<Δz,则选取的体素h(x,y+1,z)与h(x+1,y+1,z+1)还不相邻,连接它们的体素可能为h(x+1,y+1,z)或h(x,y+1,z+1),但由于ezx<Δz,只能选取h(x+1,y+1,z)。于是体素h(x,y,z)的紧接着的三个体素为h(x,y+1,z),h(x+1,y+1,z),h(x+1,y+1,z+1)。
最后考虑情形4),eyx>=Δy且ezx>=Δz,则可能选取的体素为h(x,y+1,z)或h(x,y,z+1),与情形1)的分析类似,我们可以在yz平面由ezy=ezxΔy-eyxΔz的符号决定应该选取哪个体素。若ezy<0,则应该选取h(x,y+1,z)和h(x,y+1,z+1),于是体素h(x,y,z)的紧接着的三个体素为h(x,y+1,z),h(x,y+1,z+1),h(x+1,y+1,z+1)。否则若eyx>=0体素h(x,y,z)的紧接着的三个体素为h(x,y,z+1),h(x,y+1,z+1),h(x+1,y+1,z+1)。
3、面心立方网格上的直线生成方法 假设直线的起点和终点的面心立方坐标分别为(x1,y1,z1)和(x2,y2,z2),则(x1,y1,z1)和(x2,y2,z2)同时也是相应点的平行六面体坐标。令Δx=|x2-x1|,Δy=|y2-y1|和Δz=|z2-z1|,xsign=SIGN(x2-x1),ysign=SIGN(y2-y1)和ysign=SIGN(z2-z1)。为简便起见,我们这里假设Δx>Δy且Δx>Δz(即x轴为主坐标轴),则x值每一步都递增(或递减)。定义判断变量eyx和ezx的初始值如下eyx=2Δy-Δx,ezx=2Δz-Δx。如图3所示,面心立方网格上,两点(x1,y1,z1)和(x2,y2,z2)之间的直线生成方法包括如下步骤 步骤A选取起点(x1,y1,z1)为当前体素(也是当前平行六面体)。
步骤B与三维方形网格直线生成Bresenham方法类似,在平行六面体空间决定下一步所选取的平行六面体。如图4所示,下面将说明其详细过程。由于方法在平行六面体空间x值每一步都递增(或递减),因此只要决定下一平行六面体的y和z坐标是否变化即可。假设当前平行六面体为E=p(x,y,z),则下一平行六面体的取法只有四种可能的选择,即A=p(x+xsign,y,z),B=p(x+xsign,y+ysign,z),C=p(x+xsign,y,z+zsign)和D=p(x+xsign,y+ysign,z+zsign)。要在这四个平行六面体中选取一个使其与直线的距离最小,我们根据判断变量eyx和ezx的符号来选择。我们分两步进行,首先在xy平面由eyx的符号决定y是否变化,然后在xz平面由ezx的符号决定z是否变化。根据eyx和ezx的符号有以下四种情形 若eyx<0且ezx<0,则下一平行六面体为p(x+xsign,y,z),同时变量eyx递增为eyx=eyx+2Δy,ezx递增为ezx=ezx+2Δz。
若eyx<0且ezx>=0,则下一平行六面体为p(x+xsign,y,z+zsign),同时变量eyx递增为eyx=eyx+2Δy,ezx递增为ezx=ezx+2(Δz-Δx)。
若eyx>=0且ezx<0,则下一平行六面体为p(x+xsign,y+ysign,z),同时变量eyx递增为eyx=eyx+2(Δy-Δx),ezx递增为ezx=ezx+2Δz。
若eyx>=0且ezx>=0,则下一平行六面体为p(x+xsign,y+ysign,z+zsign),同时变量eyx递增为eyx=eyx+2(Δy-Δx),ezx递增为ezx=ezx+2(Δz-Δx)。
步骤C根据当前体素和下一个体素的相邻关系,决定是否需要增加体素,若需要增加体素,根据判断变量eyx,ezx和ezy=ezxΔy-eyxΔz的值选取合适的体素。
步骤D若还没到达终点(x2,y2,z2),则转向步骤B,否则方法结束。
运算量主要集中在步骤B和步骤C,这两步需要重复N=Max(Δx,Δy,Δz)次,在方法步骤B,需要2次比较和2次加法操作,在方法步骤C,若不需要增加体素,即一次仅生成一个体素则没有任何操作;若需要增加1个体素,即一步生成2个体素,则步骤C需要1次比较操作;若需要增加2个体素,即一步生成3个体素,则步骤C最多需要2次比较、2次乘法和1次加法运算共5次操作。因此,本方法的时间复杂度为O(N)。
我们用VC6.0在Intel 2.53GHz微机上编程实现了本发明的直线生成方法。为了测试其生成速度,我们在面心立方网格中嵌入一个球面,随机取球面上的点,连接其和球心得到一条直线,则该直线即为球面的半径,通过生成这些直线得到方法的执行时间。我们通过改变球面半径大小(直线长度)和直线数目得到不同组数据。表2列出了对于不同长度和数目的直线,本文方法的执行时间比较,表中所列的时间是执行完整的方法所需的时间,即包括主循环体外对判断变量等的初值和增量的计算。从表2可以看出,随着直线长度的加大和直线数目的增加,方法执行时间逐步增加。
表2生成不同长度直线所需要的时间(单位秒)

权利要求
1.一种基于附属平行六面体空间的面心立方网格直线生成方法,该方法包括,
以菱形十二面体为体素的面心立方网格三维空间中,在三维方形网格的Bresenham方法的基础上,利用附属平行六面体空间的平行六面体与面心立方网格空间的体素之间的一一对应关系生成面心立方网格直线,其步骤为
a.建立离散面心立方网格空间的附属平行六面体空间;
b.分析面心立方网格空间体素及其对应的附属平行六面体之间的邻接关系;
c.选取平行六面体起点(x1,y1,z1)为当前体素;
d.三维方形网格直线生成方法采用Bresenham方法,在平行六面体空间决定下一步所选取的平行六面体;
e.根据当前平行六面体和选取的下一个平行六面体的相邻关系和对应体素的相邻关系,决定是否需要增加体素并选取合适的体素;
f.若还没到达终点(x2,y2,z2),则返回d,否则方法结束。
2.根据权利要求1一种基于附属平行六面体空间的面心立方网格直线生成方法,
其特征是离散面心立方空间的附属平行六面体空间
离散面心立方空间N定义相应的附属平行六面体空间N1,N中的每个体素h(x,y,z)都对应一个N1的平行六面体p(x,y,z)具有相同的中心,并且平行六面体p(x,y,z)的边为空间N的基向量u,v和w,按这种方法定义的N1和N具有相同的中心和基向量。
3.根据权利要1所述的一种基于附属平行六面体空间的面心立方网格直线生成方法,其特征在于Bresenham方法只采用整数运算。
4.根据权利要1所述的一种基于附属平行六面体空间的面心立方网格直线生成方法,其特征在于面心立方网格体素及其对应平行六面体之间的邻接关系。
全文摘要
本发明提供一种基于附属平行六面体空间的面心立方网格直线生成方法,以提高图形系统中直线的生成效率。本方法在三维方形网格Bresenham方法的基础上,利用附属平行六面体空间的平行六面体与面心立方网格空间的体素之间的一一对应关系生成直线。本方法应用简单的判断公式只涉及到整数运算;除了在一步生成三个体素的时候需要2次整数乘法运算外,其余的只用到整数加法、减法、移位、比较运算,因而没有累计误差,本方法的时间复杂度为O(N)。面心立方网格生成的直线与方形网格生成的直线比较,在相同质量的条件下,体素数量更少,生成的直线更平滑。该方法为基于面心立方网格的真实感显示,体绘制,光线追踪,消除隐藏线面及三维重建等技术提供。
文档编号G06T17/00GK101763653SQ201010010050
公开日2010年6月30日 申请日期2010年1月6日 优先权日2010年1月6日
发明者何丽君, 王德高, 云健, 刘勇奎 申请人:大连民族学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1