一种带复杂边界约束的封闭圆柱面的网格划分方法和系统

文档序号:21344 发布日期:2021-09-21 浏览:12次 >En<

阅读说明:本技术 一种带复杂边界约束的封闭圆柱面的网格划分方法和系统 (Grid division method and system for closed cylindrical surface with complex boundary constraint ) 是由 董天林 刘云华 刘清华 潘隽永 刘坤 于 2021-06-25 设计创作,主要内容包括:本发明公开了一种带复杂边界约束的封闭圆柱面的网格划分方法,包括:从实体模型获取封闭圆柱面的多个边界环、以及多个参数,该参数包括封闭圆柱面的坐标系、封闭圆柱面的半径、以及封闭圆柱面的轴线方向,对封闭圆柱面的每个边界环中的每条边依次进行离散计算,以得到多个离散点,该边界环对应的所有离散点构成该边界环对应的离散点链表,离散点在离散点链表中的排列顺序与该离散点在其所在边中的排列顺序一致,将每个边界环对应的离散点链表中的每个离散点进行映射变换,以得到对应的平面映射点,并建立该平面映射点与其对应离散点之间的映射关系。本发明能够解决目前不存在针对带复杂边界约束的封闭圆柱面的网格划分方法的技术问题。(The invention discloses a grid division method of a closed cylindrical surface with complex boundary constraint, which comprises the following steps: obtaining a plurality of boundary rings of a closed cylindrical surface and a plurality of parameters from an entity model, wherein the parameters comprise a coordinate system of the closed cylindrical surface, the radius of the closed cylindrical surface and the axis direction of the closed cylindrical surface, sequentially performing discrete calculation on each edge in each boundary ring of the closed cylindrical surface to obtain a plurality of discrete points, all the discrete points corresponding to the boundary rings form a discrete point chain table corresponding to the boundary rings, the arrangement sequence of the discrete points in the discrete point chain table is consistent with the arrangement sequence of the discrete points in the edge where the discrete points are located, performing mapping transformation on each discrete point in the discrete point chain table corresponding to each boundary ring to obtain a corresponding plane mapping point, and establishing a mapping relation between the plane mapping point and the corresponding discrete point. The invention can solve the technical problem that no grid division method aiming at the closed cylindrical surface with complex boundary constraint exists at present.)

一种带复杂边界约束的封闭圆柱面的网格划分方法和系统

技术领域

本发明属于计算机图形学和计算机辅助设计

技术领域

,更具体地,涉及一种带复杂边界约束的封闭圆柱面的网格划分方法和系统。

背景技术

轻量化转换的时候需要将零件解析成多个曲面,其中封闭圆柱面在所有曲面中占比很大,为了实现对整个零件的三角网格划分,封闭圆柱面的三角网格划分是相当重要的一部分。

然而,目前针对带复杂边界约束的封闭圆柱面而言,还没有一种公开的网格划分方法。

发明内容

针对现有技术的以上缺陷或改进需求,本发明提供了一种带复杂边界约束的封闭圆柱面的网格划分方法和系统,其目的在于,解决目前不存在针对带复杂边界约束的封闭圆柱面的网格划分方法的技术问题。

为实现上述目的,按照本发明的一个方面,提供了一种带复杂边界约束的封闭圆柱面的网格划分方法,包括以下步骤:

(1)从实体模型获取封闭圆柱面的多个边界环、以及多个参数,该参数包括封闭圆柱面的坐标系、封闭圆柱面的半径、以及封闭圆柱面的轴线方向。

(2)对步骤(1)中获取的封闭圆柱面的每个边界环中的每条边依次进行离散计算,以得到多个离散点,该边界环对应的所有离散点构成该边界环对应的离散点链表,离散点在离散点链表中的排列顺序与该离散点在其所在边中的排列顺序一致;

(3)将步骤(2)中得到的每个边界环对应的离散点链表中的每个离散点进行映射变换,以得到对应的平面映射点,并建立该平面映射点与其对应离散点之间的映射关系,其中该边界环对应的离散点链表中所有离散点对应的平面映射点构成该边界环对应的平面点链表;

(4)对步骤(1)得到的边界环进行分类,以得到构成封闭圆柱面的外边界的边界环的第一索引值index1和第二索引值index2、以及被xoz平面中x大于0的部分平面所分割的多个边界环对应的索引链表crosslist和未被分割的多个边界环对应的索引链表Ncrosslist;

(5)对步骤(4)得到的索引链表crosslist中每个索引值对应的边界环进行分割,以得到三类边界环链表connect1、connect2和connect3;

(6)针对构成封闭圆柱面外边界的、第一索引值index1和第二索引值index2对应的两个边界环而言,重复上述步骤(5),以得到更新后的三类边界环链表connect1’、connect2’和connect3’;

(7)对步骤(6)更新后的边界环链表connect1’、connect2’和connect3’进行反向处理,以得到反向处理后的边界环链表connect1’、connect2’和connect3’;

(8)根据步骤(7)反向处理后的边界环链表中平面映射点的坐标对边界环链表进行分类,以得到四类分类处理后的边界环链表;

(9)获取步骤(8)得到的第一类边界环链表和第三类边界环链表中每一个边界环所处的层数,将得到的第一类边界环链表和第三类边界环链表中每个奇数层的每个边界环与位于其上一层、且包含在该奇数层内的每个边界环组成一个新的边界环;

(10)对步骤(9)中得到的每个新的边界环进行坐标变换,并对坐标变换后的每个边界环进行三角网格划分,以得到点链表vList、以及对应的三角形拓扑关系链表fList,并根据步骤(3)建立的平面映射点与离散点之间的映射关系确定点链表vList中的每个平面映射点所对应的离散点;

(11)获取步骤(8)得到的第二类边界环链表和第四类边界环链表中每一个边界环所处的层数,将得到的第二类边界环链表和第四类边界环链表中每个偶数层的每个边界环与位于其上一层、且包含在该偶数层内的每个边界环组成一个新的边界环;

(12)对步骤(11)中得到的每个新的边界环进行坐标变换,并对坐标变换后的每个边界环进行三角网格划分,以得到点链表vList、以及对应的三角形拓扑关系链表fList,并根据步骤(3)建立的平面映射点与离散点之间的映射关系确定点链表vList中的每个平面映射点所对应的离散点;

(13)对边界环链表connect1’、第二类边界环链表和第四类边界环链表中的第一层、以及步骤(4)得到的索引链表Ncrosslist中的边界环进行坐标变换,并对坐标变换后的每个边界环进行三角网格划分,以得到点链表vList、以及对应的三角形拓扑关系链表fList,并根据步骤(3)建立的平面映射点与离散点之间的映射关系确定点链表vList中的每个平面映射点所对应的离散点。

优选地,步骤(2)中对不同边进行离散计算是根据不同边的类型进行对应的处理:

如果某条边是直线,则直接取该边的两个端点作为离散点;

如果某条边是圆或者圆弧,则离散点的数量等于:

其中endangle是圆弧的终止角,startangle是圆弧的起始角,h是用户输入的玄高,r表示圆弧的半径;

如果某条边是相贯线,则直接获取该相贯线中的相贯点,将所有相贯点相连得到的线段的总长度等效为圆的周长,并使用上述公式计算对应的离散点数量,如果该离散点数量小于相贯点的总数,则从所有相贯点中采样数量等于离散点数量的相贯点作为离散点;如果该离散点数量等于相贯点的总数,则使用所有相贯点作为离散点;如果该离散点数量大于相贯点的总数,则使用拉格朗日插值法在相邻的两个相贯点之间插入新的离散点,再对得到的所有离散点和所有相贯点进行采样,以得到总数等于离散点数量的多个点作为离散点。

如果某条边是NURBS曲线,则从该NURBS曲线中获取多个控制点,将所有控制点相连得到的线段的总长度等效为圆的周长,并使用上述公式计算对应的离散点数量,使用该NURBS曲线的节点向量最大值和最小值的差除以离散点数量,得到步长值,根据节点向量最大值、最小值和步长值得到所有离散点对应的节点向量,最后根据每个离散点对应的节点向量、NURBS曲线的节点向量、以及NURBS曲线中的控制点得到对应的离散点。

优选地,步骤(3)具体为,首先是取离散点链表中的任意一个离散点Pt,计算Pt在封闭圆柱面坐标系中的角度,将该角度作为离散点Pt对应的平面映射点mPt的x值;如果interPt到Pt的方向与z轴方向相同,则平面映射点mPt的y值为Pt与interPt的距离dis,如果interPt到Pt的方向与z轴方向相反,则平面映射点mPt的y值为-dis,平面映射点mPt的z值为0,其中将Pt按轴线方向投影到xoy平面上得到interPt,interPt与x轴的夹角即为Pt在封闭圆柱面坐标系中的角度。

优选地,步骤(4)包括以下子步骤:

(4-1)将坐标最大值max和坐标最小值min初始化为第1个边界环对应的平面点链表中第一个平面映射点的y值,并设置计数器i=1;

(4-2)判断i是否大于步骤(1)得到的边界环的总数,如果是则进入步骤(4-8),否则进入步骤(4-3);

(4-3)设置计数器j=1;

(4-4)判断j是否大于第i个边界环对应的平面点链表中平面映射点的总数,如果是则进入步骤(4-7),否则进入步骤(4-5);

(4-5)判断第i个边界环对应的平面点链表中第j个平面映射点的y值是大于坐标最大值max,还是处于坐标最大值max和坐标最小值min之间,还是小于坐标最小值min,如果是大于坐标最大值max则设置第一索引值index1=i,坐标最大值max=第j个平面映射点的y值,并进入步骤(4-6),如果是处于坐标最大值max和坐标最小值min之间,则进入步骤(4-6),如果是小于坐标最小值min,则设置第二索引值index2=i,坐标最小值min=第j个平面映射点的y值,并进入步骤(4-6);

(4-6)设置计数器j=j+1,并返回步骤(4-4);

(4-7)设置计数器i=i+1,并返回步骤(4-2);

(4-8)设置计数器k=1;

(4-9)判断k是否大于步骤(1)得到的边界环的总数,如果是则过程结束,否则进入步骤(4-10);

(4-10)判断k是否等于第一索引值index1或第二索引值index2,如果是则进入步骤(4-12),否则进入步骤(4-11);

(4-11)判断第k个边界环是否被xoz平面中x大于0的部分平面所分割,如果是则将k值存入链表Crosslist中,并进入步骤(4-12),否则将k值存入链表Ncrosslist中,并进入步骤(4-12);

(4-12)设置k=k+1,并返回步骤(4-9);

优选地,步骤(5)包括以下子步骤:

(5-1)设置计数器m=1;

(5-2)判断m是否大于crosslist中索引值的总数,如果是则过程结束,否则进入步骤(5-3);

(5-3)设置计数器n=1,初始化链表recognitionList为空,初始化变量findCount=0;

(5-4)判断n是否大于索引链表crosslist中第m个索引值所对应的边界环对应的平面点链表中平面映射点的总数,如果是则进入步骤(5-31),否则进入步骤(5-5);

(5-5)获取索引链表crosslist中第m个索引值所对应的边界环对应的平面点链表中第n个平面映射点nPt、及其前一个平面映射点pPt,并判断n是否等于1,如果是则将n设置为索引链表crosslist中第m个索引值所对应的边界环对应的平面点链表中平面映射点的总数,然后进入步骤(5-6),否则设置p=n-1,然后进入步骤(5-6);

(5-6)判断索引链表crosslist中第m个索引值所对应的边界环对应的平面点链表中第n个平面映射点nPt的x值与前一个点平面映射点pPt的x值之间的差是否小于阈值threshold(其是值为120到180之间,优选为180),如果是则将平面映射点nPt加入链表recognitionList中,然后进入步骤(5-30),否则说明这两个平面映射点位于xoz平面的两侧,进入步骤(5-7);

(5-7)判断第n个平面映射点nPt的x值是否等于0且第p个平面映射点pPt的x值等于360,如果是则进入步骤(5-13),否则进入步骤(5-8);

(5-8)判断第n个平面映射点nPt的x值是否等于360且第p个平面映射点pPt的x值等于0,如果是则进入步骤(5-14),否则进入步骤(5-9);

(5-9)判断第n个平面映射点nPt的x值是否等于0,如果是则进入步骤(5-15),否则进入步骤(5-10);

(5-10)判断第n个平面映射点nPt的x值是否等于360,如果是则进入步骤(5-16),否则进入步骤(5-11);

(5-11)判断第p个平面映射点pPt的x值是否等于0,如果是则进入步骤(5-17),否则进入步骤(5-12);

(5-12)判断第p个平面映射点pPt的x值是否等于360,如果是则进入步骤(5-18),否则进入步骤(5-19);

(5-13)将第n个平面映射点nPt记录为点nsPt,将第p个平面映射点pPt记录为点nbPt;

(5-14)将第n个平面映射点nPt记录为点nbPt,将第p个平面映射点pPt记录为点nsPt;

(5-15)将第n个平面映射点nPt记录为点nsPt,并将点nbPt的x值设置为360,将点nbPt的y值设置为第n个平面映射点nPt与第p个平面映射点pPt之间的连线与x=0的直线交点的y值;

(5-16)将点nsPt的x值设置为0,y值设置为第n个平面映射点nPt与第p个平面映射点pPt之间的连线与x=0的直线交点的y值,并将第n个平面映射点nPt记录为点nbPt;

(5-17)将第p个平面映射点pPt记录为点nsPt,将点nbPt的x值设置为360,y值设置为第n个平面映射点nPt与第p个平面映射点pPt之间的连线与x=0的直线交点的y值;

(5-18)将点nsPt的x值设置为0,y值设置为第n个平面映射点nPt与第p个平面映射点pPt之间的连线与x=0的直线交点的y值,并将第p个平面映射点pPt记录为点nbPt;

(5-19)将点nsPt的x值设置为0,y值设置为第n个平面映射点nPt与第p个平面映射点pPt之间的连线与x=0的直线交点的y值,将点nbPt的x值设置为360,y值设置为第n个平面映射点nPt与第p个平面映射点pPt之间的连线与x=0的直线交点的y值;

(5-20)判断findCount为0还是为1,如果为0则进入步骤(5-21);如果为1则进入步骤(5-23);

(5-21)判断第n个平面映射点nPt的x值是否小于阈值threshold,如果是则将点nsPt加入链表recognitionList中,然后进入步骤(5-22),否则将点nbPt加入链表recognitionList中,然后进入步骤(5-22);

(5-22)判断第n个平面映射点nPt是否是链表recognitionList中的最后一个点,如果是则将第n个平面映射点nPt加入recognitionList,并设置findCount为1,然后进入步骤(5-30),否则进入步骤(5-30);

(5-23)判断链表recognitionList中最后一个点的x值是否小于阈值threshold,且点nsPt不是链表recognitionList中的最后一个点,如果是则将点nsPt加入recognitionList,然后进入步骤(5-25),否则进入步骤(5-24);

(5-24)判断链表recognitionList中最后一个点的x值是否大于threshold,且点nbPt不是链表recognitionList中的最后一个点,如果是则将点nbPt加入链表recognitionList,然后进入步骤(5-25),否则清空链表recognitionList,并进入步骤(5-30);

(5-25)判断链表recognitionList中点的总数是否大于2,如果是则进入步骤(5-26),否则进入步骤(5-27);

(5-26)判断链表recognitionList中第一点和最后一个点中一个的x值是0,而另一个的x值是360,如果是则将链表recognitionList加入链表connect1中,然后进入步骤(5-28),否则进入步骤(5-27);

(5-27)判断链表recognitionList中第二个点的x值是否小于threshold,若是则将链表recognitionList加入链表connect2中,然后进入步骤(5-28),否则将链表recognitionList加入链表connect3中,然后进入步骤(5-28);

(5-28)清空链表recognitionList,并判断第n个平面映射点nPt的x值是否小于阈值threshold,如果是则将点nsPt加入链表recognitionList,然后转入步骤(5-29),否则将点nbPt加入recognitionList,然后进入步骤(5-29);

(5-29)设置findCount等于1,并判断点nPt是否不是链表recognitionList中的最后一个点,如果不是则将点nPt加入链表recognitionList,然后进入步骤(5-30),如果是则进入步骤(5-30);

(5-30)设置计数器n=n+1,并返回步骤(5-4);

(5-31)设置m=m+1,并返回步骤(5-2)。

优选地,本步骤(7)具体为,首先是对边界环链表connect1’中的每个边界环进行判断,如果该边界环中第一个平面映射点的x值大于最后一个平面映射点的x值,则对该边界环链表connect1’中的该边界环进行反向处理,否则不对该边界环做任何处理,然后,对边界环链表connect2’中的每个边界环进行判断,如果该边界环中第一个平面映射点的y值小于最后一个平面映射点的y值,则对该边界环链表connect2’中的该边界环进行反向处理,否则不对该边界环做任何处理;最后对边界环链表connect3’中的每个边界环进行判断,如果该边界环中第一个平面映射点的y值大于最后一个平面映射点的y值,则对该边界环链表connect3’中的该边界环进行反向处理,否则不对该边界环做任何处理。

优选地,步骤(8)包括以下子步骤:

(8-1)获取反向处理后的边界环链表connect1’对应的所有边界环中第一个平面映射点的y值,按照从大到小的顺序对边界环链表connect1’对应的所有边界环进行排序;

(8-2)将边界环链表connect2’对应的所有边界环按照这些边界环中平面映射点的y值进行分类,以得到两类分类处理后的边界环链表;

(8-3)将边界环链表connect3’对应的所有边界环按照这些边界环中平面映射点的y值进行分类,以得到两类分类处理后的边界环链表;

优选地,步骤(8-2)具体为,如果边界环链表connect2’对应的某个边界环中的第一个平面映射点的y值大于边界环链表connect1’对应的所有边界环中第一个平面映射点的y值,或者小于边界环链表connect1’对应的所有边界环中第一个平面映射点的y值,则将该边界环链表connect2’对应的该边界环作为第一类,加入第一类边界环链表boundary1;否则将该边界环链表connect2’对应的该边界环作为第二类,加入第二类边界环链表boundary2;

步骤(8-3)具体为,如果边界环链表connect3’对应的某个边界环中的第一个平面映射点的y值大于边界环链表connect1’对应的所有边界环中第一个平面映射点的y值,或者小于边界环链表connect1’对应的所有边界环中第一个平面映射点的y值,则将该边界环链表connect3’对应的该边界环作为第三类,加入第三类边界环链表boundary3;否则将该边界环链表connect3’对应的该边界环作为第四类,加入第四类边界环链表boundary4。

优选地,坐标变换过程是将边界环中每个平面映射点的x值乘以封闭圆柱面的半径,然后乘以π,再除以180,从而将其转换成对应的弧长。

按照本发明的另一方面,提供了一种带复杂边界约束的封闭圆柱面的网格划分系统,包括:

第一模块,用于从实体模型获取封闭圆柱面的多个边界环、以及多个参数,该参数包括封闭圆柱面的坐标系、封闭圆柱面的半径、以及封闭圆柱面的轴线方向。

第二模块,用于对第二模块中获取的封闭圆柱面的每个边界环中的每条边依次进行离散计算,以得到多个离散点,该边界环对应的所有离散点构成该边界环对应的离散点链表,离散点在离散点链表中的排列顺序与该离散点在其所在边中的排列顺序一致;

第三模块,用于将第一模块中得到的每个边界环对应的离散点链表中的每个离散点进行映射变换,以得到对应的平面映射点,并建立该平面映射点与其对应离散点之间的映射关系,其中该边界环对应的离散点链表中所有离散点对应的平面映射点构成该边界环对应的平面点链表;

第四模块,用于对第一模块得到的边界环进行分类,以得到构成封闭圆柱面的外边界的边界环的第一索引值index1和第二索引值index2、以及被xoz平面中x大于0的部分平面所分割的多个边界环对应的索引链表crosslist和未被分割的多个边界环对应的索引链表Ncrosslist;

第五模块,用于对第四模块得到的索引链表crosslist中每个索引值对应的边界环进行分割,以得到三类边界环链表connect1、connect2和connect3;

第六模块,用于针对构成封闭圆柱面外边界的、第一索引值index1和第二索引值index2对应的两个边界环而言,重复上述第五模块,以得到更新后的三类边界环链表connect1’、connect2’和connect3’;

第七模块,用于对第六模块更新后的边界环链表connect1’、connect2’和connect3’进行反向处理,以得到反向处理后的边界环链表connect1’、connect2’和connect3’;

第八模块,用于根据第七模块反向处理后的边界环链表中平面映射点的坐标对边界环链表进行分类,以得到四类分类处理后的边界环链表;

第九模块,用于获取第八模块得到的第一类边界环链表和第三类边界环链表中每一个边界环所处的层数,将得到的第一类边界环链表和第三类边界环链表中每个奇数层的每个边界环与位于其上一层、且包含在该奇数层内的每个边界环组成一个新的边界环;

第十模块,用于对第九模块中得到的每个新的边界环进行坐标变换,并对坐标变换后的每个边界环进行三角网格划分,以得到点链表vList、以及对应的三角形拓扑关系链表fList,并根据第三模块建立的平面映射点与离散点之间的映射关系确定点链表vList中的每个平面映射点所对应的离散点;

第十一模块,用于获取第八模块得到的第二类边界环链表和第四类边界环链表中每一个边界环所处的层数,将得到的第二类边界环链表和第四类边界环链表中每个偶数层的每个边界环与位于其上一层、且包含在该偶数层内的每个边界环组成一个新的边界环;

第十二模块,用于对第十一模块中得到的每个新的边界环进行坐标变换,并对坐标变换后的每个边界环进行三角网格划分,以得到点链表vList、以及对应的三角形拓扑关系链表fList,并根据第三模块建立的平面映射点与离散点之间的映射关系确定点链表vList中的每个平面映射点所对应的离散点;

第十三模块,用于对边界环链表connect1’、第二类边界环链表和第四类边界环链表中的第一层、以及第四模块得到的索引链表Ncrosslist中的边界环进行坐标变换,并对坐标变换后的每个边界环进行三角网格划分,以得到点链表vList、以及对应的三角形拓扑关系链表fList,并根据第三模块建立的平面映射点与离散点之间的映射关系确定点链表vList中的每个平面映射点所对应的离散点。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:

(1)本发明由于采用了步骤(2),可以根据不同的精度控制参数,得到不同精度的划分结果,适应性强。

(2)本发明由于采用了步骤(10)、(12)和(13)中的坐标变换,保证了平面映射结果与实际空间展开结果基本一致,从而避免了网格划分结果出错的问题。

附图说明

图1是本发明带复杂边界约束的封闭圆柱面的示意图;

图2是本发明分类得到的边界环的示意图;

图3是本发明方法的步骤(13)对坐标变换后的每个边界环进行三角网格划分的示意图;

图4是本发明方法的步骤(14)得到的每个平面映射点所对应的离散点的示意图;

图5是本发明带复杂边界约束的封闭圆柱面的网格划分方法的流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

如图5所示,本发明提供了一种带复杂边界约束的封闭圆柱面的网格划分方法(图1所示为封闭圆柱面,其是由两个边界环组成外边界,其余的边界环组成内边界),包括以下步骤:

(1)从实体模型获取封闭圆柱面的多个边界环、以及多个参数,该参数包括封闭圆柱面的坐标系(坐标原点、x轴方向、y轴方向、z轴方向)、封闭圆柱面的半径、以及封闭圆柱面的轴线方向。

具体而言,本步骤中的实体模型可以是UG实体模型、或者ProE实体模型。

(2)对步骤(1)中获取的封闭圆柱面的每个边界环中的每条边依次进行离散计算,以得到多个离散点,该边界环对应的所有离散点构成该边界环对应的离散点链表,离散点在离散点链表中的排列顺序与该离散点在其所在边中的排列顺序一致;

具体而言,本步骤对不同边进行离散计算是根据不同边的类型进行对应的处理:如果某条边是直线,则直接取该边的两个端点作为离散点;

如果某条边是圆或者圆弧,则离散点的数量等于:

其中endangle是圆弧的终止角,startangle是圆弧的起始角,h是用户输入的玄高,r表示圆弧的半径;对于圆来说,endangle与startangle相减的结果等于2π;基于得到的离散点数量,就可以确定对应的离散点。

如果某条边是相贯线,则直接获取该相贯线中的相贯点,将所有相贯点相连得到的线段的总长度等效为圆的周长,并使用上述公式计算对应的离散点数量,如果该离散点数量小于相贯点的总数,则从所有相贯点中采样数量等于离散点数量的相贯点作为离散点;如果该离散点数量等于相贯点的总数,则使用所有相贯点作为离散点;如果该离散点数量大于相贯点的总数,则使用拉格朗日插值法在相邻的两个相贯点之间插入新的离散点,再对得到的所有离散点和所有相贯点进行采样,以得到总数等于离散点数量的多个点作为离散点。

如果某条边是非均匀有理B样条(Non Uniform Rational B-spline,简称NURBS)曲线,则从该NURBS曲线中获取多个控制点,将所有控制点相连得到的线段的总长度等效为圆的周长,并使用上述公式计算对应的离散点数量,使用该NURBS曲线的节点向量最大值和最小值的差除以离散点数量,得到步长值,根据节点向量最大值、最小值和步长值得到所有离散点对应的节点向量,最后根据每个离散点对应的节点向量、NURBS曲线的节点向量、以及NURBS曲线中的控制点得到对应的离散点。

步骤(2)的优点在于,对边进行了按精度离散计算,可以根据不同的精度参数得到不同的离散点,离散点越多,网格划分后的结果就和原始三维模型约接近

(3)将步骤(2)中得到的每个边界环对应的离散点链表中的每个离散点进行映射变换,以得到对应的平面映射点,并建立该平面映射点与其对应离散点之间的映射关系,其中该边界环对应的离散点链表中所有离散点对应的平面映射点构成该边界环对应的平面点链表;

具体而言,本步骤首先是取离散点链表中的任意一个离散点Pt,计算Pt在封闭圆柱面坐标系中的角度(将Pt按轴线方向投影到xoy平面上得到interPt,interPt与x轴的夹角[0,360),即为Pt在封闭圆柱面坐标系中的角度),将该角度作为离散点Pt对应的平面映射点mPt的x值;如果interPt到Pt的方向与z轴方向相同,则平面映射点mPt的y值为Pt与interPt的距离dis,如果interPt到Pt的方向与z轴方向相反,则平面映射点mPt的y值为-dis,平面映射点mPt的z值为0,表示平面点;

(4)对步骤(1)得到的边界环进行分类,以得到构成封闭圆柱面的外边界的边界环的第一索引值index1和第二索引值index2、以及被xoz平面中x大于0的部分平面所分割的多个边界环对应的索引链表crosslist和未被分割的多个边界环对应的索引链表Ncrosslist;

本步骤包括以下子步骤:

(4-1)将坐标最大值max和坐标最小值min初始化为第1个边界环对应的平面点链表中第一个平面映射点的y值,并设置计数器i=1;

(4-2)判断i是否大于步骤(1)得到的边界环的总数,如果是则进入步骤(4-8),否则进入步骤(4-3);

(4-3)设置计数器j=1;

(4-4)判断j是否大于第i个边界环对应的平面点链表中平面映射点的总数,如果是则进入步骤(4-7),否则进入步骤(4-5);

(4-5)判断第i个边界环对应的平面点链表中第j个平面映射点的y值是大于坐标最大值max,还是处于坐标最大值max和坐标最小值min之间,还是小于坐标最小值min,如果是大于坐标最大值max则设置第一索引值index1=i,坐标最大值max=第j个平面映射点的y值,并进入步骤(4-6),如果是处于坐标最大值max和坐标最小值min之间,则进入步骤(4-6),如果是小于坐标最小值min,则设置第二索引值index2=i,坐标最小值min=第j个平面映射点的y值,并进入步骤(4-6);

(4-6)设置计数器j=j+1,并返回步骤(4-4);

(4-7)设置计数器i=i+1,并返回步骤(4-2);

经过上述步骤(4-1)至(4-7)以后,最终得到的第index1和第index2个边界环,构成了封闭圆柱面的外边界,其余的边界环构成封闭圆柱面的内边界。

(4-8)设置计数器k=1;

(4-9)判断k是否大于步骤(1)得到的边界环的总数,如果是则过程结束,否则进入步骤(4-10);

(4-10)判断k是否等于第一索引值index1或第二索引值index2,如果是则进入步骤(4-12),否则进入步骤(4-11);

(4-11)判断第k个边界环是否被xoz平面中x大于0的部分平面所分割,如果是则将k值存入链表Crosslist中,并进入步骤(4-12),否则将k值存入链表Ncrosslist中,并进入步骤(4-12);

(4-12)设置k=k+1,并返回步骤(4-9);

上述步骤(4-1)到步骤(4-12)的优点在于。。。

(5)对步骤(4)得到的索引链表crosslist中每个索引值对应的边界环进行分割,以得到三类边界环链表connect1、connect2和connect3;

本步骤包括以下子步骤:

(5-1)设置计数器m=1;

(5-2)判断m是否大于crosslist中索引值的总数,如果是则过程结束,否则进入步骤(5-3);

(5-3)设置计数器n=1,初始化链表recognitionList为空,初始化变量findCount=0;

(5-4)判断n是否大于索引链表crosslist中第m个索引值所对应的边界环对应的平面点链表中平面映射点的总数,如果是则进入步骤(5-31),否则进入步骤(5-5);

(5-5)获取索引链表crosslist中第m个索引值所对应的边界环对应的平面点链表中第n个平面映射点nPt、及其前一个平面映射点pPt,并判断n是否等于1,如果是则将n设置为索引链表crosslist中第m个索引值所对应的边界环对应的平面点链表中平面映射点的总数,然后进入步骤(5-6),否则设置p=n-1,然后进入步骤(5-6);

(5-6)判断索引链表crosslist中第m个索引值所对应的边界环对应的平面点链表中第n个平面映射点nPt的x值与前一个点平面映射点pPt的x值之间的差是否小于阈值threshold(其是值为120到180之间,优选为180),如果是则将平面映射点nPt加入链表recognitionList中,然后进入步骤(5-30),否则说明这两个平面映射点位于xoz平面的两侧,进入步骤(5-7);

(5-7)判断第n个平面映射点nPt的x值是否等于0且第p个平面映射点pPt的x值等于360,如果是则进入步骤(5-13),否则进入步骤(5-8);

(5-8)判断第n个平面映射点nPt的x值是否等于360且第p个平面映射点pPt的x值等于0,如果是则进入步骤(5-14),否则进入步骤(5-9);

(5-9)判断第n个平面映射点nPt的x值是否等于0,如果是则进入步骤(5-15),否则进入步骤(5-10);

(5-10)判断第n个平面映射点nPt的x值是否等于360,如果是则进入步骤(5-16),否则进入步骤(5-11);

(5-11)判断第p个平面映射点pPt的x值是否等于0,如果是则进入步骤(5-17),否则进入步骤(5-12);

(5-12)判断第p个平面映射点pPt的x值是否等于360,如果是则进入步骤(5-18),否则进入步骤(5-19);

(5-13)将第n个平面映射点nPt记录为点nsPt,将第p个平面映射点pPt记录为点nbPt;

(5-14)将第n个平面映射点nPt记录为点nbPt,将第p个平面映射点pPt记录为点nsPt;

(5-15)将第n个平面映射点nPt记录为点nsPt,并将点nbPt的x值设置为360,将点nbPt的y值设置为第n个平面映射点nPt与第p个平面映射点pPt之间的连线与x=0的直线交点的y值;

(5-16)将点nsPt的x值设置为0,y值设置为第n个平面映射点nPt与第p个平面映射点pPt之间的连线与x=0的直线交点的y值,并将第n个平面映射点nPt记录为点nbPt;

(5-17)将第p个平面映射点pPt记录为点nsPt,将点nbPt的x值设置为360,y值设置为第n个平面映射点nPt与第p个平面映射点pPt之间的连线与x=0的直线交点的y值;

(5-18)将点nsPt的x值设置为0,y值设置为第n个平面映射点nPt与第p个平面映射点pPt之间的连线与x=0的直线交点的y值,并将第p个平面映射点pPt记录为点nbPt;

(5-19)将点nsPt的x值设置为0,y值设置为第n个平面映射点nPt与第p个平面映射点pPt之间的连线与x=0的直线交点的y值,将点nbPt的x值设置为360,y值设置为第n个平面映射点nPt与第p个平面映射点pPt之间的连线与x=0的直线交点的y值;

(5-20)判断findCount为0还是为1,如果为0则进入步骤(5-21);如果为1则进入步骤(5-23);

(5-21)判断第n个平面映射点nPt的x值是否小于阈值threshold,如果是则将点nsPt加入链表recognitionList中,然后进入步骤(5-22),否则将点nbPt加入链表recognitionList中,然后进入步骤(5-22);

(5-22)判断第n个平面映射点nPt是否是链表recognitionList中的最后一个点,如果是则将第n个平面映射点nPt加入recognitionList,并设置findCount为1,然后进入步骤(5-30),否则进入步骤(5-30);

(5-23)判断链表recognitionList中最后一个点的x值是否小于阈值threshold,且点nsPt不是链表recognitionList中的最后一个点,如果是则将点nsPt加入recognitionList,然后进入步骤(5-25),否则进入步骤(5-24);

(5-24)判断链表recognitionList中最后一个点的x值是否大于threshold,且点nbPt不是链表recognitionList中的最后一个点,如果是则将点nbPt加入链表recognitionList,然后进入步骤(5-25),否则清空链表recognitionList,并进入步骤(5-30);

(5-25)判断链表recognitionList中点的总数是否大于2,如果是则进入步骤(5-26),否则进入步骤(5-27);

(5-26)判断链表recognitionList中第一点和最后一个点中一个的x值是0,而另一个的x值是360,如果是则将链表recognitionList加入链表connect1(其初始为空)中,然后进入步骤(5-28),否则进入步骤(5-27);

(5-27)判断链表recognitionList中第二个点的x值是否小于threshold,若是则将链表recognitionList加入链表connect2(其初始为空)中,然后进入步骤(5-28),否则将链表recognitionList加入链表connect3(其初始为空)中,然后进入步骤(5-28);

(5-28)清空链表recognitionList,并判断第n个平面映射点nPt的x值是否小于阈值threshold,如果是则将点nsPt加入链表recognitionList,然后转入步骤(5-29),否则将点nbPt加入recognitionList,然后进入步骤(5-29);

(5-29)设置findCount等于1,并判断点nPt是否不是链表recognitionList中的最后一个点,如果不是则将点nPt加入链表recognitionList,然后进入步骤(5-30),如果是则进入步骤(5-30);

(5-30)设置计数器n=n+1,并返回步骤(5-4);

(5-31)设置m=m+1,并返回步骤(5-2);

经过上述步骤(5-1)到(5-31)之后,得到的链表connect1、connect2和connect3就是分割后得到的边界环链表。

上述步骤(5-1)到(5-31)的优点在于,利用了封闭圆柱面本身角度值范围为0到360的特点,对边界环进行了进一步的解析分类处理,为后续进行准确的网格划分打下了基础。

(6)针对构成封闭圆柱面外边界的、第一索引值index1和第二索引值index2对应的两个边界环而言,重复上述步骤(5),以得到更新后的三类边界环链表connect1’、connect2’和connect3’;

本步骤的过程和上述步骤(5)中的子步骤(5-3)到(5-30)这一过程完全相同,在此不再赘述。

(7)对步骤(6)更新后的边界环链表connect1’、connect2’和connect3’进行反向处理,以得到反向处理后的边界环链表connect1’、connect2’和connect3’;

具体而言,本步骤首先是对边界环链表connect1’中的每个边界环进行判断,如果该边界环中第一个平面映射点的x值大于最后一个平面映射点的x值,则对该边界环链表connect1’中的该边界环进行反向处理,否则不对该边界环做任何处理,然后,对边界环链表connect2’中的每个边界环进行判断,如果该边界环中第一个平面映射点的y值小于最后一个平面映射点的y值,则对该边界环链表connect2’中的该边界环进行反向处理,否则不对该边界环做任何处理;最后对边界环链表connect3’中的每个边界环进行判断,如果该边界环中第一个平面映射点的y值大于最后一个平面映射点的y值,则对该边界环链表connect3’中的该边界环进行反向处理,否则不对该边界环做任何处理。

(8)根据步骤(7)反向处理后的边界环链表中平面映射点的坐标对边界环链表进行分类,以得到四类分类处理后的边界环链表;

本步骤包括以下子步骤:

(8-1)获取反向处理后的边界环链表connect1’对应的所有边界环中第一个平面映射点的y值,按照从大到小的顺序对边界环链表connect1’对应的所有边界环进行排序;

(8-2)将边界环链表connect2’对应的所有边界环按照这些边界环中平面映射点的y值进行分类,以得到两类分类处理后的边界环链表;

具体而言,如果边界环链表connect2’对应的某个边界环中的第一个平面映射点的y值大于边界环链表connect1’对应的所有边界环中第一个平面映射点的y值,或者小于边界环链表connect1’对应的所有边界环中第一个平面映射点的y值,则将该边界环链表connect2’对应的该边界环作为第一类,加入第一类边界环链表boundary1;否则将该边界环链表connect2’对应的该边界环作为第二类,加入第二类边界环链表boundary2;

(8-3)将边界环链表connect3’对应的所有边界环按照这些边界环中平面映射点的y值进行分类,以得到两类分类处理后的边界环链表;

具体而言,如果边界环链表connect3’对应的某个边界环中的第一个平面映射点的y值大于边界环链表connect1’对应的所有边界环中第一个平面映射点的y值,或者小于边界环链表connect1’对应的所有边界环中第一个平面映射点的y值,则将该边界环链表connect3’对应的该边界环作为第三类,加入第三类边界环链表boundary3;否则将该边界环链表connect3’对应的该边界环作为第四类,加入第四类边界环链表boundary4;

如图2所示,其示出分类得到的边界环是第二类和第四类。

(9)获取步骤(8)得到的第一类边界环链表和第三类边界环链表中每一个边界环所处的层数,将得到的第一类边界环链表和第三类边界环链表中每个奇数层(比如第一层)的每个边界环与位于其上一层(即第二层)、且包含在该奇数层内的每个边界环组成一个新的边界环;

具体而言,如果某个边界环中的第二个平面映射点被其它N个边界环所包围,则该边界环为第N+1层边界环,其中N为非负整数。

(10)对步骤(9)中得到的每个新的边界环进行坐标变换,并对坐标变换后的每个边界环进行三角网格划分,以得到点链表vList、以及对应的三角形拓扑关系链表fList,并根据步骤(3)建立的平面映射点与离散点之间的映射关系确定点链表vList中的每个平面映射点所对应的离散点;

具体而言,坐标变换过程是将边界环中每个平面映射点的x值乘以封闭圆柱面的半径,然后乘以π,再除以180,从而将其转换成对应的弧长。

具体而言,本步骤中的三角网格划分,已经在《计算几何》中予以详细披露,在此不再赘述。

(11)获取步骤(8)得到的第二类边界环链表和第四类边界环链表中每一个边界环所处的层数,将得到的第二类边界环链表和第四类边界环链表中每个偶数层(比如第二层)的每个边界环与位于其上一层(即第三层)、且包含在该偶数层内的每个边界环组成一个新的边界环;

(12)对步骤(11)中得到的每个新的边界环进行坐标变换,并对坐标变换后的每个边界环进行三角网格划分,以得到点链表vList、以及对应的三角形拓扑关系链表fList,并根据步骤(3)建立的平面映射点与离散点之间的映射关系确定点链表vList中的每个平面映射点所对应的离散点;

具体而言,坐标变换过程是将边界环中每个平面映射点的x值乘以封闭圆柱面的半径,然后乘以π,再除以180,从而将其转换成对应的弧长。

具体而言,本步骤中的三角网格划分,已经在《计算几何》中予以详细披露,在此不再赘述。

(13)对边界环链表connect1’、第二类边界环链表和第四类边界环链表中的第一层、以及步骤(4)得到的索引链表Ncrosslist中的边界环进行坐标变换,并对坐标变换后的每个边界环进行三角网格划分(如图3所示),以得到点链表vList、以及对应的三角形拓扑关系链表fList,并根据步骤(3)建立的平面映射点与离散点之间的映射关系确定点链表vList中的每个平面映射点所对应的离散点(如图4所示);

具体而言,坐标变换过程是将边界环中每个平面映射点的x值乘以封闭圆柱面的半径,然后乘以π,再除以180,从而将其转换成对应的弧长。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

25页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:基于增强现实观测设备内部结构的方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!