基于NX平台的船舶板区域识别算法研究

2018-09-12 09:14章志兵尚云飞孟凡冲柳玉起孔海骄
精密成形工程 2018年5期
关键词:边界分组定义

章志兵,尚云飞,孟凡冲,柳玉起,孔海骄

(1. 华中科技大学,武汉 430074;2. 中国船级社技术研发中心,北京 100007)

在船舶学中,板架通常认为是由一个或多个板区域经焊接而成,不同板区域的材料、厚度等各不相同[1],因此,快速进行船舶板区域查找,定义其特定的材料、厚度等属性,对船舶建模过程具有重要意义[2]。在船舶结构上,板缝是板区域之间的边界,由板缝分割开的两部分分别属于不同的板区域,这使得依据板缝识别板区域成为可能。船舶设计单位使用的定义板区域属性的软件主要包括 NAPA,TRIBON, PATRAN等,然而,这些软件目前都是通过手动选取同属于一个板区域的面来对板区域属性进行定义,效率较低[3]。

文中提出了一种基于特定属性边优先搜索板区域的识别算法,通过定义特定的属性边,建立板架面与面之间的分组关系,从而实现搜索板区域的目的[4]。在NX11.0平台上,使用C++语言实现该算法,并使用实船模型上的板架进行测试,结果表明,该算法能够快速、准确地识别出船舶板区域[5]。使用该算法,可以有效提高船舶建模过程中的板区域识别,进而提高船舶建模的效率,降低船舶设计周期[6]。

1 船舶板区域识别总体流程

在船舶学中,板架是由一个或多个板区域焊接而成[7]。在计算机图形学中,板架可以看成是由多个面组合而成,而板区域则对应多个面的一个分组[8]。

在计算机图形学中,使用边界表示法对板架进行表示,板架对应一个实体,是面的并集[9]。面是由一个外环和若干个内环来进行描述。内环一定在外环之内,在面上沿着环的方向前进,左侧一定在面内,右侧一定在面外,通过环可以区分面内和面外。环是由有序边组成的封闭边界,相邻两边共享一个顶点,环中的边不能相交[10]。边是相邻邻面的交集,由边的起始顶点和终止顶点定义边的方向。顶点的位置由几何点来表示,是几何造型中最基本的元素[11]。

图1 边数据结构Fig.1 Edge data structure

边数据结构见图1,其中每一条边记录了两个邻面(左外环和右外环)、两个顶点、两端各自相邻的邻边[12]。为了保证每次搜索到的是一整个板区域的面,建立了基于特定属性边的板区域搜索算法,通过特定属性边得到环与环的相邻关系,当边满足特定属性时,停止向外搜索;当边不满足特定属性时,继续向外搜索,找到相邻的环,直到找到的所有的面的边都满足特定属性或为板架边界,且无法找到新的相邻环时,停止一次这样的搜索过程。这样,由特定属性边及板架边界围成的这样一组面就是一个面的分组,即是需要查找的板区域。板架边的3种情形见图2,板架上的边可能有以下几种情形: ①板架边界边,如图2中的C和D边,表示的是板架边界; ②特定属性边,这类边具有特殊的属性,用来标识分组的边界,如图2中的B边; ③板架普通边,这类边既不是板架边界,又没有记录特殊属性,因此将其定义为板架普通边,如图2中的A边。基于图1边的数据结构,相对于板架普通边,板架边界边只能找到一个内环,而没有外环,即由板架边界边只能找到一个面;而板架普通边,既存在内环,又存在外环,因此通过板架普通边可以找到两个面。需要说明的是,船舶上的板架,若存在开孔结构,如图2中的E表示开孔,此时,通过孔的边也只能找到一个面,因此将孔的边也作为板架边界边对待[13]。

图2 板架边的三种情形Fig.2 Three kinds of edges on plate

船舶板区域识别的总体流程如下: ①步骤1:建立船舶板区域相关的数据结构,首先定义板缝,使用板缝将需要进行板区域识别的板架切割,保证一个面只属于一个板区域,由切割而新形成的边定义为板缝边,再建立板缝边的数据关系,由边的数据关系建立整个板架上面的分组关系;② 步骤 2:利用建立好的板缝边的数据关系,定义优先搜索原则,从一个面出发,根据面、环、边的关系,搜索出同属于一个分组的面。一次搜索出来的面的分组就是一个板区域,重复进行此过程,直到板架上的所有面都被搜索完,就得到了板架的面分组关系,完成一个板架上的板区域搜索过程。

2 相关的数据结构

2.1 板架面切割

板架在建模过程中只是简单的通过对板架边界进行定义,没有考虑一个板架是由多个板区域组成,因此,必须首先进行板缝定义,使用板缝将一个板架切割为多个板区域,以保证一个面只属于一个板区域。

使用板缝线切割板架的示意图见图 3,图 3a显示,在未进行切割之前,板架只有几个面组成,由于模型中的面过大,一个面可能属于多个板区域。用板缝线将板架切开之后,如图3b所示,切割后的每个面只属于一个板区域。使用板缝对全船所有板架进行切割,保证每个面只属于一个板架上的一个板区域。

2.2 切割对应关系的建立

板架在切割后,对切割形成的新边进行特殊标识,以区分不同的板区域,因此,将切割形成的新边定义为板缝边。

图3 板缝切割板架Fig.3 Seam cutting panel

切割对应关系见图 4。如图 4a所示,在进行板缝定义之前,对板架上所有的边做一次属性记录,用来标识板架初始边。进行一次板缝定义之后,这些初始边仍然具有初始定义的属性。即使初始边被打断形成多段边,这些被打断形成的边会继承原有的属性。只有新生成的边如图4b中的新边,没有初始边上的属性,对于这些边,认为其是由切割形成的新边。在这些边上,记录上特定的属性,以标识其为板缝边。

图4 切割对应关系Fig.4 Cutting correspondence

2.3 面分组关系建立

利用计算机图形学中的面、环、边的关系,在同一个板架上,可以通过任意一个面,根据面的边,找到其相邻的面。任意一个面与其相邻面的关系见图5。对于任意一个face,可以通过face的环,找到其所有的边(edge(1)~edge(k)),对于任意一条边,若不是板架的边界边,则可以通过边的内环与外环关系,找到其相邻的面,从而找到一个面(face)的所有相邻的面(face(1)~face(k))。

图5 面的相邻关系Fig.5 Face-to-face relationship

板区域的一组面是由板架边界、特定属性边围成。在寻找一块板区域的面时,需要对上述搜索过程进行一些修改。在由面得到其所有的边之后,需要对边进行判断,若该边是板架边界边,或是由2.2过程定义的特定属性边,则不进行内环、外环这一搜索过程,这条边直接跳过,进行下一条边的判断、搜索过程。基于特定属性边分组的面的相邻关系见图6,遍历围成 face的边,若是板架边界边如图 6中的edge(2),则找不到这样的face(2);若是特定属性边,虽然存在face(2),但此时,由于该边是分组的边界,因此直接跳过,不向外搜索,直接进行下一条边的判断搜索。

图6 基于特定属性边分组的面的相邻关系Fig.6 Neighboring relationships of faces grouped based on specific attributes

有了上述基于特定属性边分组的面的关系,就可以开始一组面的搜索过程了。基于特定属性边分组的面的相邻关系见图7。为便于表达,图7中面的左上角f~是人为的对面的编号,没有其他特殊含义。每个面可能会有以下 3 种状态:“0”, “1”, “2”,其中状态“0”是初始状态,表示此面没有被搜索过且没有加入待搜索队列;状态“1”表示当前的面已经被加入待搜索队列中,后续会对此面进行向外搜索,得到与其在同一个区域中的面;状态“2”表示当前的面已经进行过搜索过程,为结束状态。对每一个面向外搜索时,搜索与此面的四边相邻的面,只将相邻面中状态为“0”的面加入到待搜索队列中,对于状态为“1”或状态为“2”的面,不加入待搜索队列,以避免重复搜索。如图7a,首先对板架上的所有面进行初始化,所有面上都标记状态“0”。如图7b,在板架上任取一个状态为“0”的面作为种子(seed)面,图7b中选取的为面f8。如图7c,从seed面出发,依据图6所述基于特定属性边分组的面的相邻关系,向外搜索,得到f13, f9, f3,f7这4个面,由于这些面的状态皆为“0”,因此将其加入到待搜索队列中,将其状态改为“1”,同时,由于f8面已进行过搜索过程,因此将其状态改为“2”。如图7d,从待搜索的队列中取出一个面,继续进行向外搜索的过程。如图7d中选取到f13面,f13面的4条边总,有3条边有邻面,分别为f8, f12, f14,第4边为板架边界边,因此此边跳过,同时,f8的状态为“2”,因此不加入待搜索队列中,f12, f14的状态为“0”,因此将其加入待搜索队列中,将其状态改为“1”,同时将f13的状态改为“2”。如图7e,接下来从待搜索队列中取出f9面进行向外搜索的过程。f9面只有3个相邻面:f8, f14, f4,其中f8状态为“2”,f14状态为“1”,仅f4状态为“0”,因此,将f4加入待搜索队列中,将其状态改为“1”,同时将f9状态改为“2”。如图7f,对f3进行向外搜索过程。与f9类似,搜索到f2面,将其加入待搜索队列中,更改对应的状态。如图7g,接下来对f7面进行向外搜索,f7面相邻的面有f2, f6, f8, f12,然而,f7与f6面的公共边标记了特殊的属性,依据图6中的分组原则,对于特定义属性边,不进行向外搜索过程,因此f6面不会被搜索,而f2, f8, f12面状态都不为“0”,因此直接将f7面的状态改为“2”。如图7f—7k,接下来对f12, f14, f4, f2的搜索过程与f7搜索类似,最终得到的结果见图7k,此时,待搜索队列已空,搜索过的这些面的状态都变为“2”。搜索到的这一组面就是一个面区域,至此,面的分组关系得到了建立。

图7 面的分组关系建立过程Fig.7 Process of establishing face group relationship

3 船舶板区域识别算法流程

3.1 算法流程

根据建立好的板架面的分组关系,定义如下优先搜索算法,对全船所有板架上的面进行分组(vF为板架上的所有的Face集合,FG为由一个种子面出发搜索到的一个面分组,vFG为一个板架上搜索到的所有板区域的集合,FState记录面的状态,分别有“0”,“1”, “2”这3种状态,qF维护待搜索面的序列,状态为“1”的面都将被加入到qF中)。

步骤1:建立板架上面的相邻关系,定义板缝,使用板缝切割板架,在新形成的板缝边上标识特定的属性,将一个板架上的所有的面存入vF中,标识vF中的所有的Face状态为“0”。

步骤2:从vF中任取一个状态为“0”的Face作为种子(seed)面,若找不到这样的Face,说明已经搜索完毕,结束这个板架的搜索过程。若找到一个这样的Face,则进入步骤3。

步骤3:将当前seed加入qF中,并更改其状态为状态“1”。

步骤4:判断qF是否为空,若qF非空,则取出qF中最前面的Face,将此Face加入到FG中,通过此Face,向外搜索,若此Face的边为板架边界边或特定属性边,则跳过,否则得到其相邻的Face,检测相邻 Face状态,若为状态“0”,则将其加入 qF中;若相邻Face状态为“1”或“2”,则跳过。若qF为空,则说明由步骤3中的seed开始的一次向外搜索的过程已经结束。同属于一个分组的 Face已经加入到一个FG中。FG中存储的就是一个板区域的所有Face,此时将FG加入到vFG中去,vFG中就存储了板架上的一个板区域的所有Face。

步骤5:重复进行以上步骤2~4的过程,直到在步骤2中,找不到一个被标识为状态“0”的Face停止,此时,vF中的所有 Face都标识为状态“2”,表示当前板架上的面都被搜索完成,并已被分配进各自的分组中。vFG中存储的就是这个板架上的所有的板区域分组。

经过上述优先搜索过程,所有板架上的面都被分进各自的板区域分组中,从而实现了板区域识别的目的。

3.2 应用实例

在NX11.0平台上,使用C++语言对上述板区域识别算法进行开发,并使用实船模型进行测试,结果显示,上述算法能够快速,准确地进行船舶板区域识别[14]。

使用 318000散货船进行测试的过程见图 8。模型的建模公差为2.0 mm(NX11.0可通过设置系统公差的方法设置),使用的计算机主要参数配置为:Inter(R)Core(TM)i5 760 CPU,16 GB内存[15]。定义板缝线过程见图 8a,其中使用甲板作为测试对象,在甲板上适当位置建立板缝理论线,为下一步切割做准备。图8b所示为使用图8a中定义的板缝线对甲板进行切割,图8b中蓝色高亮显示的边即是板缝边。切割后,在这些新形成的板缝边上写上特殊属性“Profile System”,用以标识这些新形成的边,这些写上特殊属性的边及板架自由边共同构成了板架面分组的边界。运用建立好的切割对应关系及分组关系,在甲板上查找板区域分组的过程见图 8c。使用此模型进行查找,在甲板上共查找到186个板区域,耗时833 ms,平均每个板区域的查找时间不到4.5 ms。在软件实际应用过程中也得到了验证,使用该算法在板架上对板区域进行实时查找,具有很低的时间复杂度,查找的准确度也非常之高。

图8 318 000散货船板识别过程Fig.8 Identification process of bulk carrier 318000

4 结语

提出了一种基于 NX平台的船舶板区域识别算法,该算法使用特定属性边及板架边界边对板架上的面分组,通过实时查找面分组,达到识别板区域的目的。基于NX11.0平台,使用C++语言对此算法进行开发,并使用实船模型进行测试。结果表明,该算法能够快速、准确地识别出船舶板区域,有效提高了船舶板区域识别、板区域属性定义的效率。对于建模精度较高的船舶模型,在甲板、外壳、船首、船尾等结构复杂的板架上也能保持很高的识别效率和准确度。而对于建模精度较差的模型,或者是由第三方平台导入的模型,由于建模公差较大,特定属性边建立时可能会出现没有完全切割到边的情况,这对板架面相邻关系的建立有一定影响,也就可能会导致后续识别不准的问题,因此,在大的建模公差下,如何提高算法的识别准确率是下一步研究的重点。

猜你喜欢
边界分组定义
拓展阅读的边界
探索太阳系的边界
意大利边界穿越之家
分组搭配
怎么分组
论中立的帮助行为之可罚边界
分组
成功的定义
修辞学的重大定义
山的定义