标签:
杂谈 |
对于三维几何元素或简称三维形体,最常用的表示法有两种:CSG和BRep。
①
CSG表示法:先定义一些形状比较简单的常用体素,如方块、圆柱、圆锥、球、棱柱等。然后用集合运算并、交、差把体素修改成复杂形状的形体。早期的CSG
模型仅使用代数方程及半空间的概念,体素只支持多面体与二次曲面体,而不支持表面含有自由曲面的实体。整个模型是棵树结构,最终形体的表面交线与有效区域
没有显式给出,不能直接用于NC加工与有限元分析等后继处理。
②
BRep表示法:用点、边、面、环以及它们之间相互的邻接关系定义三维实体,形体表面、边界线、交线等都显式给出。但是生成个别形体的过程相当复杂、不直
观,不可能由用户直接操作。它的优点是能支持所有类型的曲面作为形体表面。能直接支持NC加工与有限元分析等,故其优缺点恰与CSG模型相反。后来,人们
转向使用CSG与BRep的混合模型。
③
CSG与BRep的混合模型表示法:用CSG作为高层次抽象的数据模型,用BRep作为低层次的具体表示形式。CSG树的叶子结点除了存放传统的体素的参
数定义,还存放该体素的BRep表示。CSG树的中间结点表示它的各子树的运算结果。用这样的混合模型对用户来说十分直观明了,可以直接支持基于特征的参
数化造型功能,而对于形体加工,分析所需要的边界、交线、表面不仅可显式表示,且能够由低层的BRep直接提供。
三维形体的集合运算
通常一个形体是由两个或两个以上较简单的形体(称之为体素)经过集合运算得到的集合运算子<op>包括并(è)、交(?)、差(-)。设
A和B是两个用BRep表示描述的维数一致的多面体,集合运算结果形体C=A<op>B的步骤可简介如下:
①
确定集合运算两形体之间的关系:形体边界表示BRep结构中的面、边、点之间的基本分类关系分别是”点在面上”、”点在边上”、”两点重合”、”边在面
上”、”两边共线”、”两个多边形共面”等六种关系。先用数值计算确定”点在面上”的关系,其余五种关系可以根据”点在面上”关系推导出来。当这些关系发
生冲突时,就用推理的方法解决冲突。
②
进行边、体分类:对A形体上的每一条边,确定对B形体的分类关系(A在B形体内、外、上面、相交等);同样对B形体上的每一条边,确定对A形体的分类关系。
③
计算多边形的交线:对于A形体上的多边形PA和B形体上的每一个多边形PB,计算它们的交线。
④
构造新形体C表面上的边:对于A形体上和B形体上的每一个多边形PA、PB,根据集合运算的算子收集多边形PA的边与另一个多面体表面多边形PB的交线以
生成新形体C表面的边,如果多边形PA上有边被收集到新形体C的表面,则PA所有的平面将成为新形体C表面上的一个平面,多边形PA的一部分或全部则成为
新形体C的一个或多个多边型。如果定义了两个形体A和B的完整边界,那么形体C的完整边界就是A和B边界各部分的总和。
⑤
构造多边形的面:对新形体C上的每一个面,将其边排序构成多边形面环。
⑥ 合法性检查:检查形体C的BRep表示的合法性。
几个关于计算几何中曲线和曲面方面的网站
http://www.people.nnov.ru/fractal/Splines/Intro.htm
下面这个网站中可以下到曲线曲面相关的代码
http://www.nar-associates.com/nurbs/nurbs.html
Brep的开源实现有OpenCasCade
CSG有OpenCSG
blender是使用csg,也可以参考
CSG一般翻译为实体几何造型
Brep一般为半边结构
refer to:
http://hi.baidu.com/yhdzw_ming_cheng/blog/item/721bc519d481b2b34bedbc63