舰船科学技术  2016, Vol. 38 Issue (s1): 109-112   PDF    
基于布尔运算的上下表面识别方法
罗恒, 初云涛     
中国舰船研究设计中心, 湖北 武汉 430064
摘要: 为了提高机械制造及其加工过程中制造零件的精度,提出了基于布尔运算的上下表面识别并进行补偿的方法。根据实体的三维数据间的几何拓扑关系,通过计算相邻层间二维轮廓多边形面积及其变化率,通过二维轮廓片反推断并计算出三维实体中存在的上下表面数据,从而在机械加工过程中对上下表面数据进行补偿。经实际证明,采用布尔运算得到的上下表面数据并进行补偿能有效地提高机械零部件加工制造精度。
关键词: 布尔运算     上下表面     数据补偿     制造精度    
A method of identifying upper and lower surface based on boolean operation
LUO Heng, CHU Yun-tao     
China Ship Development and Design Center, Wuhan 430064, China
Abstract: In order to improve the precision of manufacturing parts in the process of manufacturing and machining, a method of identifying and compensating upper and lower surface based on boolean operation is presented. According to the geometric topological relations between the three dimensional data of solid in this paper, the upper and lower surface of the three dimensional entities are deduced and calculated by getting the area and change rate of two-dimensional slice contours among adjacent layers, which are compensated in the process of machining. It is proved that the data compensation of the upper and lower surface obtained by boolean operation can effectively improve the machining precision of mechanical parts.
Key words: boolean operation     upper and lower surface     data compensation     manufacturing precision    
0 引言

在机械零部件加工制造中,通常先通过三维软件绘制实体,然后通过数据处理软件将三维实体数据转换为二维的轮廓顶点数据进行制作,在三维数据转换为二维的过程中,由于分层过程会造成实体表面一些信息的丢失,如物件上下表面[1],在分层的时候根据分层厚度所在高度z值来确定实体的上表面,而三维实体高度z'实际与分层数据z值有差距,在制作的时候,按照分层得到的z值进行制作,不是从实际表面数据开始的,而是从分层的那个数据开始的;对于下表面,制作过程中,过固化会导致下表面突出实际表面的情况。在制作过程中识别模型的上下表面并进行补偿,对提高零部件的精度具有十分重要作用。

图 1 制造过程中上下表面丢失造成的误差 Fig. 1 Errors caused by loss of upper and lower surface in the manufacturing process

一些客户追求物件的表面质量,不希望成型后再进行打磨或者加工处理,寄希望于一次成型就保证物件的表面质量,因此对识别的上下表面扫面制作的时候单独进行制作处理,能更加提高上下表面的光滑度,保证成型件的精度。

1 多边形的布尔运算

多边形布尔运算主要指2个不同多边形间的并、交、差、异或运算。这里主要用到的是2组多边形的差运算,但是差运算也是通过求多边形数组的交运算后再经过其他运算得到,最核心的是先求交运算。

多边形的交运算是指2个对象之间的重叠部分。具体求取过程为:先求出2个多边形的边的所有交点,通过多边形线段间的拓扑关系求取,沿着某个多边形的边界前进,到达一个交点后,就沿着另外一个多边形的边界前进,知道遍历完所有的交点,便可得到多边形相交的部分。

图 2 多边形的交运算 Fig. 2 Intersection operation of polygons

图 2,求出多边形ABC和多边形P1P2P3的交点IJKA,从点I出发,沿着BC走向,找到交点J,然后跳到另外一个多边形,直到返回交点处,再跳到另外一个多边形,依次遍历完所有的多边形的交点,具体算法在文献[2 -3]中有详尽的描述;对于多边形数组,算法的基本原理与2个简单多边形的交运算一样,只是多些运算[2, 4];对多边形布尔运算算法进行优化,从而使算法计算速度较快、效率更高[5 -7]

多边形P的补充用$\overline P $表示,其做法是将P的边界走向反一下即可。令PQ为2个多边形,则其布尔运算为:

$\left\{ \begin{align} & P\cup Q=\overline{\overline{P\cap Q}}{ \text{,}} \\ & P-Q=P\cap \overline{Q}{ \text{,}} \\ & Q-P=Q\cap \overline{P}{ \text{,}} \\ \end{align} \right.$ (1)

由式(1)可见,要求出多边形的差运算及其他运算,最主要的是先求出多边形的交,因为其他各种运算都可以转换为交运算[5]

分层后得到许多层数据,设第i -1,ii + 1层轮廓数组${{L}_{i\text{-}1}}$${{L}_{i}}$${{L}_{i+1}}$,需要计算的上下表面轮廓数组为${{L}_{up}}(i)$${{L}_{\text{low}}}(i)$,通过求差运算来得到相应数据,具体计算公式为:

$\left\{ \begin{align} & {{L}_{\text{low}}}(i)=L(i)-L(i-1) {\text{,}}\\ & {{L}_{up}}(i)=L(i)-L(i+1) {\text{。}}\\ \end{align} \right.$ (2)
2 实体上下表面识别方法

在机械制造前期数据处理过程中,将三维实体分层得到二维轮廓数据,是一个将连续的实体离散化的过程,因此层与层二维数据之间是相互关联的,根据相邻层间的连续拓扑关系,可由此推断层实体的上下表面。本文针对二维轮廓数据进行运算, 先计算各层轮廓数据的面积,根据相邻层间面积的变化来判断实体在相邻层间是否突然多出、少出一部分,其中突变部分恰是要实体的上下表面,同时三维实体分层最终得到最低、最高层分别是实体下、上表面,通过二维多边形间的线段相关关系经过布尔运算求取数据[8],具体数据流程如图 3所示。

图 3 模型上下表面识别流程图 Fig. 3 Flow chart of identifying the upper and lower surfaces of model

二维轮廓的面积计算,double fArea,如果是外轮廓,计算得到的面积是正值,内轮廓则为负值。

如果为外轮廓,fArea不变,反之,fArea=-fArea;计算第j层的所有轮廓面积之和,假设第j层有m个轮廓,根据计算的fArea求出每个轮廓的面积,然后加和:

$S(j)=\sum\limits_{i=1}^{m}{{{S}_{i}}{\text{,}}}$ (3)

求出第j层轮廓之和后,计算与之相邻的上层轮廓面积之差,j=1...n -1,

$\left\{ \begin{align} & \Delta {{S}_{j}}=S(j+1)-S(j) {\text{,}}\\ & {{\Delta }^{2}}Su \!=\!\left| |\Delta S{{u}_{k}}|\!-\!|\Delta S{{u}_{k-1}}| \right| \!{\text{,}}\!\!\!\! \left( j\!=\!1\!\ldots n\!-\!1 \right)\left( k=2\!\ldots n\!-\!1 \right)\!{\text{,}}\\ & {{\Delta }^{2}}Sb=\left| |\Delta S{{b}_{k}}|-|\Delta S{{b}_{k-1}}| \right| {\text{。}}\\\end{align} \right.$ (4)

按式(4)计算出所有差$\Delta {{S}_{j}}$之后,依次比较$\Delta {{S}_{j}}$j=1...n -1)的值,如果${{\Delta }^{2}}{{S}_{k}}$较大或较小时,说明在第k层发生了突变,突变的层数中存在实体的上、下表面,如图 4所示。

图 4 模型上下表面的识别 Fig. 4 Identification of the upper and lower surfaces of model

图 4(a)中灰点表示该层与相邻层存在面积突变,图 4(b)中的上表面分别与图 4(a)中面积突变层相对应,图 4(c)图 4(d)分别为梯形台的面积和层数关系,虽然面积随着层数发生了变化,但是不突变,因此中间也不会存在上下表面。

针对分层好的二维层轮廓数据,来识别模型上下表面,变量定义如下:I为层数;maxLayerNum为最大层数;Q为上下表面所在层数的集合;LI)为第I层轮廓的集合;${{L}_{\text{low}}}(i)$为第i层下表面的轮廓集合;${{L}_{up}}(i)$为第i层上表面的轮廓集合。

1)上下表面所在层的识别, 具体步骤如下

I取值1……maxLayerNum;

②如果I为1或者maxLayerNum,则该层数据为上下表面,将I存入Q中;

③如果$\max LayerNum-2 \geqslant I \geqslant 3$, 根据式(3),计算相邻连续5层的层面积SI -2),SI -1),SI),SI + 1),SI + 2),根据式(4), 求出面积的一次变化率$\Delta S{{u}_{1}}$$\Delta S{{u}_{2}}$$\Delta S{{b}_{1}}$$\Delta S{{b}_{2}}$,面积的二次变化率${{\Delta }^{2}}Su$${{\Delta }^{2}}Sb$;否则,返回⑥;

④如果${{\Delta }^{2}}Su$${{\Delta }^{2}}Sb$均小于$\varepsilon $,则I=I + 1,返回③;否则执行⑤;

⑤如果$\displaystyle\frac{{{\Delta }^{2}}Su}{{{\Delta }^{2}}Sb}>\Omega $或者$\displaystyle\frac{{{\Delta }^{2}}Su}{{{\Delta }^{2}}Sb}<\varepsilon $,且$\displaystyle\frac{\Delta S{{u}_{1}}}{\Delta S{{b}_{1}}}>\Omega $,或者$\displaystyle\frac{\Delta S{{u}_{1}}}{\Delta S{{b}_{1}}}<\varepsilon $,即曲率产生突变,该层I中的数据可能存在模型的上下表面,将I存到Q中。I=I + 1,返回③;

⑥结束。

2)上下表面的计算

①从Q中取出值i,如果i为1或者maxLayerNum,则该层数据为上下表面的轮廓数据;否则,执行②;

②计算第i层相邻层的轮廓面积Si -1),Si),Si + 1),如果|S(i)-S (i-1)|$<|S(i+1)-S(i)|$,第i层数据为下表面,布尔计算得到第i层的下表面:${{L}_{\text{low}}}(i)=L(i)-L(i-1)$;若,第i层数据为上表面,计算如下:${{L}_{up}}(i)=L(i)-L(i+1)$;将${{L}_{\text{low}}}(i)$${{L}_{up}}(i)$为上下表面轮廓数据;

Q为空,则结束;否则返回①。

3)上下表面的补偿

根据${{L}_{\text{low}}}(i)$${{L}_{up}}(i)$所在层数,分层厚度fThickness, 得到该层所在高度h=i*fThickness。三维实体STL数据中三角面片的法向量$\overrightarrow{n}$朝上或者向下,则记录该三角面片的z值,遍历完实体所有三角面片,将所有的向上或向下的三角面片的z值保存。如果h与某个z值的差$\Delta h=|z-h|$$\Delta h<fThickness$,则该层需要补偿,补偿原则如下:

① ifz > h, 若补偿轮廓为${{L}_{up}}(i)$,补偿的厚度为$\Delta h$,如果$\Delta h\ge \varepsilon *fThickness$,则在高度为z的时候,进行补偿制作$\Delta h$厚的${{L}_{up}}(i)$;否则认为补偿的薄片太薄,难以制作,不进行补偿;

② ifz < h, 若补偿轮廓${{L}_{\text{low}}}(i)$,补偿的厚度为$\Delta h$,如果$\Delta h<\varepsilon *fThickness$,则不进行补偿;如果$\Delta h\geqslant \varepsilon *fThickness$,在第i层制作时,将下表面轮廓${{L}_{\text{low}}}(i)$制作为层厚$\Delta h$的薄片;ifz=h, 不进行补偿。

3 结语

三维实体分层会造成实体上下表面数据的丢失导致制作加工误差较大,本文采用布尔运算,通过实体三维数据间的拓扑关系,根据实体分层得到的二维数据中层与层间离散数据的相邻几何关系,求取实体中存在的上下表面,并根据分层厚度对上下表面在制作过程中进行补偿,从而保证了零部件制作的尺寸和精度。经实际证明模型上下表面的识别和补偿有效地提高了机械制造加工精度。

参考文献
[1] 洪军.面向STL模型特征的支撑生成技术研究[D].西安:西安交通大学, 2000.
[2] 汪国昭, 汪嘉业. 多边形组的布尔运算[J]. 计算机研究与发展 , 1987, 24 (10):59–64.
WANG Guo-zhao, WANG Jia-ye. Boolean operation on polygons[J]. Journal of Computer Research and Development , 1987, 24 (10) :59–64.
[3] 武运兴. 基于边界识别的多边形的布尔运算[J]. 计算机辅助设计与图形学学报 , 1994, 6 (4):260–265.
WU Yun-xing. Polygon Boolean operation based on edges recognition algorithm[J]. Chinese Journal of Computer-Aided Design & Computer Graphics , 1994, 6 (4) :260–265.
[4] 刘红军, 王从军, 黄树槐. 带有孔洞的多边形的布尔运算[J]. 华中科技大学学报(自然科学版) , 2003, 31 (8):18–20.
LIU Hong-jun, WANG Cong-jun, HUANG Shu-huai. Boolean operation for polygon with holes[J]. Journal of Huazhong University of Science & Technology (Natural Science Edition) , 2003, 31 (8) :18–20.
[5] 朱二喜.基于图形内角的两个任意多边形的交并差算法[D].上海:上海交通大学, 2009. http://xuewen.cnki.net/CJFD-BJLG801.016.html
[6] 阮孟贵, 章毓晋.任意多边形布尔运算的快速算法[C]//第十五届全国图象图形学学术会议论文集.北京:中国图象图形学学会, 2010.
[7] CUI C, WANG J C, MA J S. A new method of applying polygon Boolean operations based on trapezoidal decomposition[J]. GIScience & Remote Sensing , 2010, 47 (7) :566–578.
[8] 罗恒, 李涤尘, 解瑞东, 等. 快速成型中基于直骨架原理的轮廓偏置算法[J]. 计算机辅助设计与图形学学报 , 2011, 23 (11):1908–1914.
LUO Heng, LI Di-chen, XIE Rui-dong, et al. An algorithm of contour offsetting based on the principle of straight skeleton for rapid prototyping[J]. Journal of Computer-Aided Design & Computer Graphics , 2011, 23 (11) :1908–1914.