一种三维CSG-BRep模型的拓扑元素的访问方法_4

文档序号:9304715阅读:来源:国知局
改进, 初次求解出二次曲面参数后根据空间点的扫描密度采用迭代的方法自动进行点云数据的 区域分割,最后计算分割后二次曲面参数的精确值,采用线性最小二乘法对分割的二次曲 面进行精确拟合。通过拟合得到CSG体素的尺寸。CSG体素是由基本拓扑要素构成的,通 过上述CSG-BRep模型数据结构,将几何与拓扑融合在一起,结合拟合后的提速尺寸,从底 层顶点vertex来一步一步构建出模型体素。简单模型体素主要包括长方体、柱体、锥体、球 体、圆环体或封闭的自由曲面等。如图5所示,根据离散点云拟合出的柱面球面,并生成CSG 基本体素圆柱体,球体。
[0158] 2、访问拓扑结构算法
[0159] 为了实现CSG-BRep拓扑形状对于与其相连接的上下形状的访问,需要进行如下 步骤:
[0160] 访问shape的子集拓扑结构
[0161] 因为任意一个拓扑对象shape中直接包含了变量CSG_Subshape,而CSG_Subshape 中包含了一个shape的列表,该列表中存放的是拓扑对象子集的集合,所以,直接从该集合 中遍历所需要查找的拓扑类型即可。另外,如果一个拓扑元素被多次引用的话,那么可能会 遍历该元素多次,比如正方体中的一条边通常被两个面共享,要保证在遍历过程中只对一 个被共享的拓扑元素访问一次,那么必须将这些拓扑元素都放到一个映射map中。实现过 程如下:
[0162]
[0163]
[0164] 其中S是要被遍历的形体,T为要被访问的子集形体,M为自己定义的一个映射。 利用该算法可以访问任意一个拓扑对象的子对象。比如,可以查找面中的边,面中的顶点, 边中的顶点等。
[0165] 实施例2
[0166] 访问shape的父集拓扑结构
[0167] 由于本发明所设计的CSG-BRep模型的拓扑数据结构中,都是从上向下(从CSG_ Shel1或CSG_Solid到CSG_Vertex)的引用,不能像访问子集拓扑结构那样直接从子集元素 来访问该子集的父级元素,所以,本发明提出这样一种算法来解决该问题,以一个正方形为 例,如图6所示,为了查找与位于正方体的一个顶点相连接的三条边,需要按照以下步骤来 实现:
[0168]a.遍历该正方体,从该正方体中找到位于该正方体上的所有边结构。
[0169]b.在查找到的边结构中继续遍历位于该边上的顶点。
[0170]c.对b中查找到的顶点赋值一个编码,改编码为该顶点的一个唯一标识。
[0171]d.将c中顶点的标识和该顶点所在的边(b中查找到的便结构)按照key-value 的形式放入到map中。
[0172] e.从map中提取出与顶点相连接的三条边结构即可。
[0173] 具体实现过程如下:
[0174]
[0175]
[0176] 其中,S是被遍历的形体,TS若为顶点,则TA就是与该顶点所连接的边结构。
[0177] 利用该算法,可以巧妙地解决拓扑元素多次引用后造成数据冗余问题,最后处理 正方形的结果如表3,其中,leftedge到rightedge为边的逆时针前进方向,vertexID是顶 点的唯一标识:
[0178] 表3 :访问四边形中与顶点相关联的边
[0179]
[0180] 实施例3
[0181] 模型之间到模型内部拓扑关系的转化
[0182] 按照上述算法,可以实现单一模型内部拓扑关系的构建及访问,但是模型之间的 拓扑关系还未处理。利用CSG中著名的布尔运算,可以巧妙地处理模型之间的关系,通过对 不同的模型进行布尔运算,可以将模型之间的拓扑回归统一到模型内的拓扑,自然利用模 型内的算法便可以解决。
[0183] 1、将典型体素用几何参数方程表示
[0184] 求交运算是构造CSG模型布尔运算的核心内容,其效率和精度会直接影响到布尔 运算的效果,进而影响构造实体的可靠性。其中包括直线段之间的求交,直线段与面之间的 求交,还有面与面之间的求交算法。并且,求交运算的实现依赖于拓扑元素中隐含的几何要 素,如要素的曲线曲面方程。这些曲线曲面方程多以参数方程的形式来表示。本发明是按 照集合分类及线面求交的算法来实现布尔运算。表4为一些典型基本体素中几何要素的参 数方程表示。
[0185] 表4几种典型基本体素参数方程表示
[0186]
[0187] 在表4中,直线数据包含三维点P和三维向量D。直线通过点P,并沿着D方向。 平面数据包含三维点P和三维正交坐标系N,Du,Dv。平面通过点P,并且其法向量为N。圆 柱面的数据包含三维点P,三维正交坐标系Dv,Dx,Dy和一个非负实数r。圆柱面的轴通过 点P,方向为Dv,圆柱面的半径为r。圆锥面的数据包含三维点P,正交坐标系Dz,Dx,Dy,非 负实数r和实数!D(范围为(-JI/2,JI/2))。圆锥面通过点P且轴的方向为Dz。过点P且 与方向Dx,Dy平行的平面为圆锥面的参考平面。参考平面截圆锥面为一个圆,其半径为r。 球面的数据包含三维点P,三维正交坐标系Dz,Dx,Dy和非负实数r。即球面的球心为点P, 半径为r。圆环面的数据包含三维点P,三维正交坐标系Dz,Dx,Dy和非负实数rl,r2。圆 环面的轴通过点P,方向为Dz,rl是从圆环面的圆的中心到点P的距离,圆环面的圆的半径 为r2。线性拉伸面的数据包含三维方向Dv和三维曲线。旋转面的数据包含三维点P,三维 方向D和三维曲线。旋转曲面的轴通过点P且方向为D,旋转曲线为C与旋转轴共面。
[0188] 2、创建布尔运算算法
[0189] 本发明提出的布尔运算方法正是基于参数曲线和参数曲面的求交算法。在基本体 素用参数方程的形式表达之后,利用以下的方法来进行体素之间的布尔运算。
[0190] a.计算两体素之间的交点。假设现有A,B两个体素。首先遍历A中的所有边(参 数曲线表示),同时遍历B中的所有面(参数曲面表示)。将A中所有的边与B中所有的面 求交点。此时,交点将边分割。同理,再将B中所有边与A中所有面进行求交运算,得到交 点。
[0191]b.将分割以后的边进行分类处理。经过a之后,A中与B中面相交的边被交点分 割成若干段。此时判断A中这些分割以后的边是在B的内部,外部,还是重合三种情况。同 理,B相对于A采取相同的操作。
[0192]c.求解新的交线。在求解新的交线之前需要先确定有效交点。即如果a步骤中求 解的交点同时满足在A的边界上和在B的边界内(含边界),则该交点为有效点。同理,判 断B相对于A的有效点。在判断出所有的有效点之后,将这些有效点进行重新连线,得到新 的交线。
[0193]d.AB中原有边界的去留。根据b中的分类结果以及c中新的交线来完成布尔运 算。当A和B做求交运算时,则A中的边相对于B是内部的和边界的,作为保留,舍去相对 于B外部边,同时对B相对于A采取相同的操作。当A和B做求并运算或者差运算时,A中 的边相对于B是外部的,作为保留,舍去内部。
[0194]e.将保留下来的边界,重新按照拓扑重建思想由边构建环,再由环构建面,面构建 壳和体的的方式构建出A和B布尔运算之后的结果S。
[0195] 以上算法的核心是实现a步骤中参数曲线和参数曲面的求交问题。将所有的参数 曲线统一表示为:C(t) = (x(t),y(t),z(t)).所有的参数曲面统一表示为F(u,v) = (x(u, v),y(u,v),z(u,v)).则参数曲线和参数曲面的交点由下面的公式确定。
[0196]a.参数方程求交需满足C(t)_F(u,v) = 0,令S(t,u,v) =C(t)_F(u,v)。p
[0197]b.求微分。
[0198]c.各参数微分显示表示
[0199]
[0200] d.c中两边点乘并令》=i 终得到e中的迭代方程
[0201] e?迭代方程。
[0205] 在得到迭代方程之后,对曲线和曲面分别建立包围盒树,当曲线的包围盒树与曲 面的包围盒树叶子相交时,取两个叶子内的参数值作为初值t。,u。,V。进行迭代,直到满足收 敛条件,最终求取交点
[0206] 按照上述算法,通过模型之间的布尔运算,将模型之间的拓扑关系再次回归到模 型内部拓扑关系的构建及拓扑结构的访问。
[0207] 本发明利用VS2010作为开发环境,利用C++语言进行编程,本实验的数据源为利 用三位激光扫仪获取的点云数据,通过点云数据拟合出基本体素长方体,圆柱体等,利用 文章前面提出的RANSAC改进算法拟合及计算出点云中长方体,圆柱体等尺寸参数,同时 结合前文所述的拓扑模型,并通过布尔运算构建出具有拓扑关系的故宫太和门大木结构 CSG-BR印模型,如图7所示。为了做比较,同时用第三方软件GeomagicStudi〇12生成大木 结构的三角网模型,如图8所示。通过拓扑访问,查询分析该CSG-BRep大木结构模型,可以 获得图7所示的模型共包含81个圆柱体,148个长方体。模型可拆分。具有详细的拓扑关 系。占用内存的大小为336KB。而根据离散点直接生成的如图8所示的普通三角网大木结 构模型,共包含3991个点,7475个三角面片。模型不可拆分。只包含三角形个顶点的连接 关系,无完整的拓扑关系。占
当前第4页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1