CN110633517B - 一种用于三维场景的高效切片方法 - Google Patents
一种用于三维场景的高效切片方法 Download PDFInfo
- Publication number
- CN110633517B CN110633517B CN201910826646.8A CN201910826646A CN110633517B CN 110633517 B CN110633517 B CN 110633517B CN 201910826646 A CN201910826646 A CN 201910826646A CN 110633517 B CN110633517 B CN 110633517B
- Authority
- CN
- China
- Prior art keywords
- point
- points
- triangle
- closed loop
- dimensional
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
Abstract
本发明涉及一种用于大型三维场景的高效切片方法,属于三维图形切片的处理方法。该方法包括如下四个步骤:步骤(A)、数据预处理阶段;步骤(B)、被剖切三维三角面片的定位剖切面阶段;步骤(C)、计算交点坐标阶段;步骤(D)、三角剖分孔填充阶段;本发明在不同的三维数据设置下的实验结果验证了三维切片方案的高效性和有效性。
Description
技术领域
本发明涉及一种用于大型三维场景的高效切片方法,属于三维图形切片的处理方法。
背景技术
大规模三维模型或海量三维模型的巨型三维场景在工业上正变得越来越流行,三维切片是观察和分析三维模型的基本操作工具之一,目前,先进的三维设计平台正取代传统的计算机辅助设计工具,具有可视化方便、操作简单等优点。在这样的背景下,海量的三维场景(1万多个模型和近一千万个三维顶点)在三维电路设计领域得到了广泛的应用。在计算机科学界对常规三维模型的特征提取、分割、绘制等基本技术进行深入研究的同时,针对大型三维场景的具体处理技术也越来越受到业界的重视。由于规模大,三维切片的效率是设计时的基本要求。
目前现有的三维引擎提供的剖切方法并没有办法生成剖面,其他一些生成剖面的方法性能也较为低下,无法满足应用要求。
发明内容
本发明的目的在于提供一种适用于大型三维场景的高效切片方案,在不同的三维数据设置下的实验结果验证了三维切片方案的高效性和有效性。
三维模型的主要构成为顶点和三角面片,剖切三维模型的思路就是定位到平面所切割的三角形面片,并定位到所剖切到的三角形的边,并计算三角形的相交边和平面的交点,交点绘制成一系列的多边形,最后对多边形进行着色填充处理。
本发明为了实现上述目的,采用如下技术方案:
一种用于三维场景的高效切片方法,该方法包括如下四个步骤:
步骤(A)、数据预处理阶段;
步骤(B)、被剖切三维三角面片的定位剖切面阶段;
步骤(C)、计算交点坐标阶段;
步骤(D)、三角剖分孔填充阶段;
在步骤(A)中,将三维场景中的切片平面经过旋转和平移操作转换为XOY平面,转换的目的是将三维切片问题转化为Z轴切割问题;
具体的:将切片平面和三维模型转换为具有相同转换函数的XOY平面,包括旋转和平移,为此进行如下操作:
沿X轴旋转:
沿Y轴旋转:
沿Z轴平移:
其中,d是到XOY平面的距离,θ和α分别是剖切平面和X轴、Y轴的夹角;因此,经过上述变换之后,三维切片问题变成了使用XOY平面的Z轴切割问题;
在步骤(B)中,三维场景包含多个三维模型,在该阶段需要遍历每个模型,针对每个模型定位被平面所剖切到的三角形;
切片方案中有效地定位被剖切到的三角面片,为了实现上述有效地定位被剖切到的三角面片,对此定义:
若三维模型中的点V的z轴坐标Vz<0,则定义一个标签b=-1;
若三维模型中的点V的z轴坐标Vz>0,则定义一个标签b=1;
三维模型M的顶点为V,三角面片为F,三角面片的三个点为F=(V1,V2,V3),标签值为b(F)=(b(V1z),b(V2z),b(V3z))),对于每个三角形的三个顶点的标签值,当满足以下条件则表示该三角面片是被剖切三角面片:
|sum(b(F))|=|b(V1z)+b(V2z)+b(V3z)|=1 (4)
若每个三角形的三个顶点的标签值为±1,则该三角形为被剖切到的三角面片;
在步骤(C)中,通过步骤(B)得到了三维模型的被剖切三角形列表FS,下面则是计算三角面片与XOY平面的交点;
首先提取相交三角形的三条边,给定一个相交三角形面片f=(v1,v2,v3),对每个顶点标记一个同步骤(B)中相同的的标签值b,即b(v1)、b(v2)、b(v3),三个标签值中一定有一个标签值是不同于另外两个的,因此假定:b(v1)=-1,b(v2)=1,b(v3)=1,如此,点v1、v2构成一条相交边,v1、v3构成一条相交边,即{e1,e2}={(v1,v2),(v1,v3)},就可定义两条相交边的集合分别为{E1,E2}={(V1,V2),(V1,V3)},交点坐标就由相交边{E1,E2}求得;
设定一条相交边e=(v1,v2),其两个端点坐标分别为v1=(x1,y1,z1),和v2=(x2,y2,z2),设交点坐标为v0=(x0,y0,0),由相似三角形定理,可以得到:
其中|v1 v0|和|v1 v2|为相交边上由相交点所分割开的两条线段的模,由此可以计算得到交点坐标为:
对于每个三角形和平面的相交边{e1,e2}是相邻的,因此计算得到的交点也是相邻的,因此,由相交边集合{E1,E2}求得的相交点是成对相邻的,如两两相邻的点构成一条线段,最终所构成的多边形环是自动闭合的;
在步骤(D)中,该步需找到步骤(C)中所构成的多边形环上点的连接顺序;
找到闭环之后需要多个点封闭为多边形,多边形包括如下形式,有凸多边形、凹多边形和圆环面,凸多边形和凹多边形只需得到多边形的顺时针顺序或逆时针顺序,而圆环面不仅需要其坐标点顺序,还需要辨别坐标点处于内环还是外环,因此,针对圆环面的内环外环辨别采用以下方法:
有多边形的点集P={pi,i=1...p},对于任意一点pi,是由相交边得到,相交边上两点的法向量为则定义点pi的/>接着计算得到多边形点集P的中心点p_c,P上任一点pi与中心点构成向量/>因此,由向量点乘法则:
其中α为向量之间的夹角,由此可得:
依照式(8)计算得到圆环上任一点pi对应的夹角αi,对于任意一个i,若αi>90°,则pi为外环上的点,αi<90°,则pi为内环上的点;同样的,求得内环、外环上点的顺时针或逆时针顺序;
当得到多边形上的顺时针或逆时针的点顺序后,需对多边形进行封闭处理,多边形封闭策略为对多边形进行三角化处理。
进一步的,关于在步骤(D)中,所构成的多边形环上点的连接顺序的具体处理情况;
(一)对没有重复点的情况的处理;
首先对每个点的相邻点构造一个相邻数组列表,若没有重复点的情况,闭环上每个点的相邻点个数均为2,同时构造一个空数组L用来存放闭环连接点的连接关系,具体步骤如下:
D1、随机指定一个点为起始点,并将该点存入L中的第一个值;
D2、查找该点的两个相邻点,并以相邻点列表中的第一个点为作下一个点,并将该点依次存入L中;
D3、在向下链接时,首先查看相邻点列表中的第一个点是否在链表L中,若在,便将相邻点列表中的第二个点作为下一个点,并将该点存放到L中;
D4、对于每一个点重复执行D2和D4操作,直至闭环的最后一个点找到他的下一个连接点为起始点时结束;
(二)对于有重复点的情况;
首先,同(一)对没有重复点的情况的处理的步骤,对每个点的相邻点构造一个相邻数组列表,对于有重复点的情况,闭环上点的相邻点的个数为2或大于2;对于相邻点个数等于2的点依照上述没有重复点的情况处理,对于相邻点个数大于2的点按照以下步骤处理:这种情况下,不知道到底有多少个闭环,因此只能通过寻找的方式来确定,确定方法为:
对于该模型的剖切交点集合P,P中可构成n个闭环,此处指定遍历所有重复点作为起点来寻找闭环,依次为L1,…Li,…Ln;
D5、如同相邻点个数为2个时一样,将相邻点列表中的第一个点作为下一个点,依次寻找连接点,当下一个点遇到的同样是重复点,也还是将列表中的第一个点做为下一个点,以此类推,直至找到闭环,令当前闭环连接列表为L1;
D6、当下一次遍历遇到该重复点时,首先判断哪个点是在当前闭环上的,将除此点外的点依次遍历,将重复点的相邻点反复循环遍历,选择的点所构成的闭环与当前已有闭环重复,则将此点舍弃,继续选择相邻点列表中的其他的点,反复循环遍历相邻点,继续寻找闭环,得到一系列闭环,闭环依次为L2,L3,…,Li;
D7、重复以上操作,直到找不到闭环为止:遍历到最后,若最后一个点的下一个点不是该闭环的起始点边不是闭环,依次来判断是不是闭环且终止循环的条件,因此不会陷入死循环,当闭环全部找到将要陷入死循环时,设置:当找到重复闭环的个数为所有重复点重复次数之和时,停止寻找闭环,以此避免陷入死循环。
进一步的,在步骤(D)中,多边形进行三角化处理为:首先使用Hertel-Mehlhorn算法进行凸分区,然后针对凸分区使用Delaunay Watson算法进行三角剖分。
进一步的,所述凸分区使用Delaunay Watson算法进行三角剖分方法如下:
a、构造一个超级三角形,包含所有散点,放入三角形链表;
b、将点集中的散点依次插入,在三角形链表中找出外接圆包含插入点的三角形,称为该点的影响三角形,删除影响三角形的公共边,将插入点同影响三角形的全部顶点连接起来,完成一个点在Delaunay三角形链表中的插入;
c、根据优化准则对局部新形成的三角形优化,将形成的三角形放入Delaunay三角形链表;
d、循环执行上述第b步,直到所有散点插入完毕。
本发明的有益效果:
本发明该方案由数据预处理阶段、被剖切三维三角面片的定位、相交点的高效计算和多边形三角剖分组成,在不同的三维数据设置下的实验结果验证了三维切片方案的高效性和有效性。对于一个比如具有五千万个顶点,三万三千多个子模型的大场景模型,使用该方案进行剖切,其算法经过0.7秒左右便可以准确完成剖切。
附图说明
图1为本发明的流程图;
图2为本发明的定位相交三角形,并求得点坐标的示意图;
图3为本发明每个模型定位被平面所剖切到的三角形的示意图;
图4为本发明三角剖分孔填充阶段所构成的多边形环上点的连接顺序的示意图;
图5为本发明孔填充效果示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1-5,本发明提供一种技术方案:
一种用于三维场景的高效切片方法,该方法包括如下四个步骤:
步骤(A)、数据预处理阶段;
步骤(B)、被剖切三维三角面片的定位剖切面阶段;
步骤(C)、计算交点坐标阶段;
步骤(D)、三角剖分孔填充阶段;
在步骤(A)中,将三维场景中的切片平面经过旋转和平移操作转换为XOY平面,转换的目的是将三维切片问题转化为Z轴切割问题;
具体的:将切片平面和三维模型转换为具有相同转换函数的XOY平面,包括旋转和平移,为此进行如下操作:
沿X轴旋转:
沿Y轴旋转:
沿Z轴平移:
其中,d是到XOY平面的距离,θ和α分别是剖切平面和X轴、Y轴的夹角;因此,经过上述变换之后,三维切片问题变成了使用XOY平面的Z轴切割问题;
在步骤(B)中,三维场景包含多个三维模型,在该阶段需要遍历每个模型,针对每个模型定位被平面所剖切到的三角形;
切片方案中有效地定位被剖切到的三角面片,为了实现上述有效地定位被剖切到的三角面片,对此定义(如图3所示):
若三维模型中的点V的z轴坐标Vz<0,则定义一个标签b=-1;
若三维模型中的点V的z轴坐标Vz>0,则定义一个标签b=1;
三维模型M的顶点为V,三角面片为F,三角面片的三个点为F=(V1,V2,V3),标签值为b(F)=(b(V1z),b(V2z),b(V3z)),对于每个三角形的三个顶点的标签值,当满足以下条件则表示该三角面片是被剖切三角面片:
|sum(b(F))|=|b(V1z)+b(V2z)+b(V3z)|=1 (4)
若每个三角形的三个顶点的标签值为±1,则该三角形为被剖切到的三角面片;
在步骤(C)中,通过步骤(B)得到了三维模型的被剖切三角形列表FS,下面则是计算三角面片与XOY平面的交点;
首先提取相交三角形的三条边,给定一个相交三角形面片f=(v1,v2,v3),对每个顶点标记一个同步骤(B)中相同的的标签值b,即b(v1)、b(v2)、b(v3),三个标签值中一定有一个标签值是不同于另外两个的,因此假定:b(v1)=-1,b(v2)=1,b(v3)=1,如此,点v1、v2构成一条相交边,v1、v3构成一条相交边,即{e1,e2}={(v1,v2),(v1,v3)},就可定义两条相交边的集合分别为{E1,E2}={(V1,V2),(V1,V3)},交点坐标就由相交边{E1,E2}求得;
设定一条相交边e=(v1,v2),其两个端点坐标分别为v1=(x1,y1,z1),和v2=(x2,y2,z2),设交点坐标为v0=(x0,y0,0),由相似三角形定理,可以得到:
其中|v1 v0|和|v1 v2|为相交边上由相交点所分割开的两条线段的模,由此可以计算得到交点坐标为:
对于每个三角形和平面的相交边{e1,e2)是相邻的,因此计算得到的交点也是相邻的,因此,由相交边集合{E1,E2}求得的相交点是成对相邻的,如两两相邻的点构成一条线段,最终所构成的多边形环是自动闭合的;(由一段一段的线段所绘制而成),图2为从定位相交三角形,到求得交点坐标的图解:
在步骤(D)中,该步需找到步骤(C)中所构成的多边形环上点的连接顺序;
如图4,现将图上7个点编号,2号和5号点为重复点。此时会形成三个闭环:
①1,2,3,4,5,1(环1)
②3,2,7,6,5,4,3(环2)
③1,2,7,6,5,1(3环)
因此,对于算法要求我们还是只需找到所有闭环上点的连接顺序即可。
找到闭环之后需要多个点封闭为多边形,多边形包括如下形式,有凸多边形、凹多边形和圆环面,凸多边形和凹多边形只需得到多边形的顺时针顺序或逆时针顺序,而圆环面不仅需要其坐标点顺序,还需要辨别坐标点处于内环还是外环,因此,针对圆环面的内环外环辨别采用以下方法:
有多边形的点集P={pi,i=1...p},对于任意一点pi,是由相交边得到,相交边上两点的法向量为则定义点pi的/>接着计算得到多边形点集P的中心点p_c,P上任一点pi与中心点构成向量/>因此,由向量点乘法则:
其中α为向量之间的夹角,由此可得:
依照式(8)计算得到圆环上任一点pi对应的夹角αi,对于任意一个i,若αi>90°,则pi为外环上的点,αi<90°,则pi为内环上的点;同样的,求得内环、外环上点的顺时针或逆时针顺序;
当得到多边形上的顺时针或逆时针的点顺序后,需对多边形进行封闭处理,多边形封闭策略为对多边形进行三角化处理。
进一步的,关于在步骤(D)中,所构成的多边形环上点的连接顺序的具体处理情况;
(一)对没有重复点的情况的处理;
首先对每个点的相邻点构造一个相邻数组列表,若没有重复点的情况,闭环上每个点的相邻点个数均为2,同时构造一个空数组L用来存放闭环连接点的连接关系,具体步骤如下:
D1、随机指定一个点为起始点,并将该点存入L中的第一个值;
D2、查找该点的两个相邻点,并以相邻点列表中的第一个点为作下一个点,并将该点依次存入L中;
D3、在向下链接时,首先查看相邻点列表中的第一个点是否在链表L中,若在,便将相邻点列表中的第二个点作为下一个点,并将该点存放到L中;
D4、对于每一个点重复执行D2和D4操作,直至闭环的最后一个点找到他的下一个连接点为起始点时结束;
(二)对于有重复点的情况;
首先,同(一)对没有重复点的情况的处理的步骤,对每个点的相邻点构造一个相邻数组列表,对于有重复点的情况,闭环上点的相邻点的个数为2或大于2;对于相邻点个数等于2的点依照上述没有重复点的情况处理,对于相邻点个数大于2的点按照以下步骤处理:这种情况下,不知道到底有多少个闭环,因此只能通过寻找的方式来确定,确定方法为:
对于该模型的剖切交点集合P,P中可构成n个闭环,此处指定遍历所有重复点作为起点来寻找闭环,依次为L1,…Li,…Ln;
D5、如同相邻点个数为2个时一样,将相邻点列表中的第一个点作为下一个点,依次寻找连接点,当下一个点遇到的同样是重复点,也还是将列表中的第一个点做为下一个点,以此类推,直至找到闭环,令当前闭环连接列表为L1;
D6、当下一次遍历遇到该重复点时,首先判断哪个点是在当前闭环上的,将除此点外的点依次遍历,将重复点的相邻点反复循环遍历,选择的点所构成的闭环与当前已有闭环重复,则将此点舍弃,继续选择相邻点列表中的其他的点,反复循环遍历相邻点,继续寻找闭环,得到一系列闭环,闭环依次为L2,L3,…,Li;
D7、重复以上操作,直到找不到闭环为止:遍历到最后,若最后一个点的下一个点不是该闭环的起始点边不是闭环,依次来判断是不是闭环且终止循环的条件,因此不会陷入死循环,当闭环全部找到将要陷入死循环时,设置:当找到重复闭环的个数为所有重复点重复次数之和时,停止寻找闭环,以此避免陷入死循环。
以图4为例:
假设起始点为2,下一个点定为3,3找到4,4找到5,5的相邻点有4,1,6,其中4已结在列表中,因此将1作为下一个点,1找到2,又因为2为起始点,找到闭环,由此得到内子环L1:2,3,4,5,1,2。
下面继续寻找闭环,假设下一个起始点还是2,2找到7,7找到6,6找到5,5的相邻点为4,1,6,点6已经在当前闭环中,因此将4作为下一个点,4找到3,3找到2,又因为2为起点,所以找到闭环:L2:2,7,6,5,4,3,2。
下面继续寻找闭环,还是以2为起点,2找到3,3到4,4到5,5到6,6到7,7到2,发现找到的闭环与L2重复,因此继续寻找,还是以2为起点,2到1,1到5,5到4,4到3,3到2,发现与L1重复,因此继续寻找,2找到1,1到5,5到6,6到7,7到2,由此找到新的闭环L3:2,1,5,6,7,2,因此继续寻找闭环,易知,下面所找到的闭环都是重复的,对于如何退出寻找闭环的循环:由点2重复了3次,点5重复了3次,我们设置,将所有重复点次数相加来限制,这里如果寻找到6次重复闭环便停止寻找闭环。(可举例验证其合理性)
进一步的,在步骤(D)中,多边形进行三角化处理为:首先使用Hertel-Mehlhorn算法进行凸分区,然后针对凸分区使用Delaunay Watson算法进行三角剖分。
进一步的,所述凸分区使用Delaunay Watson算法进行三角剖分方法如下:
a、构造一个超级三角形,包含所有散点,放入三角形链表;
b、将点集中的散点依次插入,在三角形链表中找出外接圆包含插入点的三角形,称为该点的影响三角形,删除影响三角形的公共边,将插入点同影响三角形的全部顶点连接起来,完成一个点在Delaunay三角形链表中的插入;
c、根据优化准则对局部新形成的三角形优化,将形成的三角形放入Delaunay三角形链表;
d、循环执行上述第b步,直到所有散点插入完毕。
以上结合具体实施例描述了本发明的技术原理。这些描述只是为了解释本发明的原理,而不能以任何方式解释为对本发明保护范围的限制。基于此处的解释,本领域的技术人员不需要付出创造性的劳动即可联想到本发明的其它具体实施方式,这些方式都将落入本发明的保护范围之内。
Claims (4)
1.一种用于三维场景的高效切片方法,其特征在于:该方法包括如下四个步骤:
步骤(A)、数据预处理阶段;
步骤(B)、被剖切三维三角面片的定位剖切面阶段;
步骤(C)、计算交点坐标阶段;
步骤(D)、三角剖分孔填充阶段;
在步骤(A)中,将三维场景中的切片平面经过旋转和平移操作转换为XOY平面,转换的目的是将三维切片问题转化为Z轴切割问题;
具体的:将切片平面和三维模型转换为具有相同转换函数的XOY平面,包括旋转和平移,为此进行如下操作:
沿X轴旋转:
沿Y轴旋转:
沿Z轴平移:
其中,d是到XOY平面的距离,θ和α分别是剖切平面和X轴、Y轴的夹角;因此,经过上述变换之后,三维切片问题变成了使用XOY平面的Z轴切割问题;
在步骤(B)中,三维场景包含多个三维模型,在该阶段需要遍历每个模型,针对每个模型定位被平面所剖切到的三角形;
切片方案中有效地定位被剖切到的三角面片,为了实现上述有效地定位被剖切到的三角面片,对此定义:
若三维模型中的点V的z轴坐标Vz<0,则定义一个标签b=-1;若三维模型中的点V的z轴坐标Vz>0,则定义一个标签b=1;
三维模型M的顶点为V,三角面片为F,三角面片的三个点为F=(V1,V2,V3),标签值为b(F)=(b(V1z),b(V2z),b(V3z)),对于每个三角形的三个顶点的标签值,当满足以下条件则表示该三角面片是被剖切三角面片:
|sum(b(F))|=|b(V1z)+b(V2z)+b(V3z)|=1 (4)
若每个三角形的三个顶点的标签值的和为±1,则该三角形为被剖切到的三角面片,否则为未被剖切到的三角面片;
在步骤(C)中,通过步骤(B)得到了三维模型的被剖切三角形列表FS,下面则是计算三角面片与XOY平面的交点;
首先提取相交三角形的三条边,给定一个相交三角形面片f=(v1,v2,v3),对每个顶点标记一个同步骤(B)中相同的的标签值b,即b(v1)、b(v2)、b(v3),三个标签值中一定有一个标签值是不同于另外两个的,因此假定:b(v1)=-1,b(v2)=1,b(v3)=1,如此,点v1、v2构成一条相交边,v1、v3构成一条相交边,即{e1,e2}={(v1,v2),(v1,v3)},就可定义两条相交边的集合分别为{E1,E2}={(V1,V2),(V1,V3)},交点坐标就由相交边{E1,E2}求得;
设定一条相交边e=(v1,v2),其两个端点坐标分别为v1=(x1,y1,z1),和v2=(x2,y2,z2),设交点坐标为v0=(x0,y0,0),由相似三角形定理,可以得到:
其中|v1v0|和|v1v2|为相交边上由相交点所分割开的两条线段的模,由此可以计算得到交点坐标为:
对于每个三角形和平面的相交边{e1,e2}是相邻的,因此计算得到的交点也是相邻的,因此,由相交边集合{E1,E2}求得的相交点是成对相邻的,如两两相邻的点构成一条线段,最终所构成的多边形环是自动闭合的;
在步骤(D)中,该步需找到步骤(C)中所构成的多边形环上点的连接顺序;
找到闭环之后需要多个点封闭为多边形,多边形包括如下形式,有凸多边形、凹多边形和圆环面,凸多边形和凹多边形只需得到多边形的顺时针顺序或逆时针顺序,而圆环面不仅需要其坐标点顺序,还需要辨别坐标点处于内环还是外环,因此,针对圆环面的内环外环辨别采用以下方法:
有多边形的点集P={pi,i=1...p},对于任意一点pi,是由相交边得到,相交边上两点的法向量为则定义点pi的/>接着计算得到多边形点集P的中心点p_c,P上任一点pi与中心点构成向量/>因此,由向量点乘法则:
其中β为向量之间的夹角,由此可得:
依照式(8)计算得到圆环上任一点pi对应的夹角βi,对于任意一个i,若βi>90°,则pi为外环上的点,βi<90°,则pi为内环上的点;同样的,求得内环、外环上点的顺时针或逆时针顺序;
当得到多边形上的顺时针或逆时针的点顺序后,需对多边形进行封闭处理,多边形封闭策略为对多边形进行三角化处理。
2.根据权利要求1所述的用于三维场景的高效切片方法,其特征在于:
关于在步骤(D)中,所构成的多边形环上点的连接顺序的具体处理情况;
(一)对没有重复点的情况的处理;
首先对每个点的相邻点构造一个相邻数组列表,若没有重复点的情况,闭环上每个点的相邻点个数均为2,同时构造一个空数组L用来存放闭环连接点的连接关系,具体步骤如下:
D1、随机指定一个点为起始点,并将该点存入L中的第一个值;
D2、查找该点的两个相邻点,并以相邻点列表中的第一个点为作下一个点,并将该点依次存入L中;
D3、在向下链接时,首先查看相邻点列表中的第一个点是否在链表L中,若在,便将相邻点列表中的第二个点作为下一个点,并将该点存放到L中;
D4、对于每一个点重复执行D2和D4操作,直至闭环的最后一个点找到他的下一个连接点为起始点时结束;
(二)对于有重复点的情况;
首先,同(一)对没有重复点的情况的处理的步骤,对每个点的相邻点构造一个相邻数组列表,对于有重复点的情况,闭环上点的相邻点的个数为2或大于2;对于相邻点个数等于2的点依照上述没有重复点的情况处理,对于相邻点个数大于2的点按照以下步骤处理:这种情况下,不知道到底有多少个闭环,因此只能通过寻找的方式来确定,确定方法为:
对于该模型的剖切交点集合P,P中可构成n个闭环,此处指定遍历所有重复点作为起点来寻找闭环,依次为L1,…Li,…Ln;
D5、如同相邻点个数为2个时一样,将相邻点列表中的第一个点作为下一个点,依次寻找连接点,当下一个点遇到的同样是重复点,也还是将列表中的第一个点做为下一个点,以此类推,直至找到闭环,令当前闭环连接列表为L1;
D6、当下一次遍历遇到该重复点时,首先判断哪个点是在当前闭环上的,将除此点外的点依次遍历,将重复点的相邻点反复循环遍历,选择的点所构成的闭环与当前已有闭环重复,则将此点舍弃,继续选择相邻点列表中的其他的点,反复循环遍历相邻点,继续寻找闭环,得到一系列闭环,闭环依次为L2,L3,…,Li;
D7、重复以上操作,直到找不到闭环为止:遍历到最后,若最后一个点的下一个点不是该闭环的起始点边不是闭环,依次来判断是不是闭环且终止循环的条件,因此不会陷入死循环,当闭环全部找到将要陷入死循环时,设置:当找到重复闭环的个数为所有重复点重复次数之和时,停止寻找闭环,以此避免陷入死循环。
3.根据权利要求1所述的用于三维场景的高效切片方法,其特征在于:在步骤(D)中,多边形进行三角化处理为:首先使用Hertel-Mehlhorn算法进行凸分区,然后针对凸分区使用Delaunay Watson算法进行三角剖分。
4.根据权利要求3所述的用于三维场景的高效切片方法,其特征在于:
所述凸分区使用Delaunay Watson算法进行三角剖分方法如下:
a、构造一个超级三角形,包含所有散点,放入三角形链表;
b、将点集中的散点依次插入,在三角形链表中找出外接圆包含插入点的三角形,称为该点的影响三角形,删除影响三角形的公共边,将插入点同影响三角形的全部顶点连接起来,完成一个点在Delaunay三角形链表中的插入;
c、根据优化准则对局部新形成的三角形优化,将形成的三角形放入Delaunay三角形链表;
d、循环执行上述第b步,直到所有散点插入完毕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910826646.8A CN110633517B (zh) | 2019-09-03 | 2019-09-03 | 一种用于三维场景的高效切片方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910826646.8A CN110633517B (zh) | 2019-09-03 | 2019-09-03 | 一种用于三维场景的高效切片方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110633517A CN110633517A (zh) | 2019-12-31 |
CN110633517B true CN110633517B (zh) | 2023-07-25 |
Family
ID=68970008
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910826646.8A Active CN110633517B (zh) | 2019-09-03 | 2019-09-03 | 一种用于三维场景的高效切片方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110633517B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116310261B (zh) * | 2023-05-19 | 2023-08-08 | 深圳开鸿数字产业发展有限公司 | 三维模型分割方法、装置、设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6678571B1 (en) * | 2000-07-07 | 2004-01-13 | 3D Systems, Inc. | Micro-slicing contour smoothing technique |
CN101373543A (zh) * | 2008-09-28 | 2009-02-25 | 武汉大学 | 三维网格模型的快速剖切方法 |
CN101441780A (zh) * | 2008-11-05 | 2009-05-27 | 武汉大学 | 三维网格模型的剖切方法 |
CN105389410A (zh) * | 2014-08-25 | 2016-03-09 | 株式会社三丰 | 三维模型生成方法和三维模型生成系统 |
CN105550468A (zh) * | 2016-01-18 | 2016-05-04 | 沈阳工业大学 | 基于层变边数组和邻接边顺序链表的等层厚切片算法 |
CN106373184A (zh) * | 2016-08-30 | 2017-02-01 | 苏州紫金港智能制造装备有限公司 | 一种三维打印模型摆放所需支撑量快速估算方法 |
CN109360260A (zh) * | 2018-10-22 | 2019-02-19 | 南京科远自动化集团股份有限公司 | 一种三角网格三维模型的切挖重构算法 |
CN109934928A (zh) * | 2019-03-18 | 2019-06-25 | 江西博微新技术有限公司 | 基于骨架化的三维模型简化方法 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100634536B1 (ko) * | 2005-01-25 | 2006-10-13 | 삼성전자주식회사 | 3차원 그래픽스 환경에서의 2차원 고가도로 데이터의 3차원 변환 방법 및 장치, 그리고 이를 이용한 3차원 그래픽스 환경에서의 2차원 고가도로 데이터의 3차원 시각화 방법 및 장치 |
JP5158223B2 (ja) * | 2011-04-06 | 2013-03-06 | カシオ計算機株式会社 | 三次元モデリング装置、三次元モデリング方法、ならびに、プログラム |
CN103413297A (zh) * | 2013-07-16 | 2013-11-27 | 南京师范大学 | 基于一体化三维gis模型的切割方法 |
JP6091371B2 (ja) * | 2013-07-29 | 2017-03-08 | ローランドディー.ジー.株式会社 | スライスデータ作成装置、スライスデータ作成方法、プログラムおよびコンピューター読み取り可能な記録媒体 |
JP6474995B2 (ja) * | 2014-11-11 | 2019-02-27 | ローランドディー.ジー.株式会社 | スライスデータ作成装置、スライスデータ作成方法、プログラムおよびコンピューター読み取り可能な記録媒体 |
CN104708824B (zh) * | 2015-03-12 | 2017-03-01 | 中国科学院重庆绿色智能技术研究院 | 一种保留模型特征的3d打印自适应切片方法 |
KR101635431B1 (ko) * | 2015-09-08 | 2016-07-04 | 한국생산기술연구원 | 연산수 감축을 위한 stl 슬라이싱 방법 |
CN106200559A (zh) * | 2016-07-11 | 2016-12-07 | 湖南大学 | 一种用于3d打印切片的快速生成方法 |
CN106875495B (zh) * | 2016-12-23 | 2020-07-07 | 合肥阿巴赛信息科技有限公司 | 基于凹凸贴图的浮雕网格表示及3d打印切片方法和系统 |
DE102017212371B4 (de) * | 2017-07-19 | 2020-06-04 | Carl Zeiss Industrielle Messtechnik Gmbh | Bestimmung einer Marke in einem Datensatz mit mittels zumindest eines Laserscanners erfassten dreidimensionalen Oberflächen-Koordinaten einer Szene |
CN107818195B (zh) * | 2017-08-24 | 2021-04-06 | 宁波大学 | 一种基于关联树的3d打印填充路径生成方法 |
CN107610230B (zh) * | 2017-09-12 | 2020-09-11 | 首都师范大学 | 一种3d打印数字模型剖切及接口设计方法及应用 |
CN109159425B (zh) * | 2018-08-21 | 2020-12-04 | 东莞中国科学院云计算产业技术创新与育成中心 | 三维模型的切片方法及三维打印装置 |
CN109685914B (zh) * | 2018-11-06 | 2021-02-05 | 南方电网调峰调频发电有限公司 | 基于三角网格模型的剖切轮廓自动补面方法 |
-
2019
- 2019-09-03 CN CN201910826646.8A patent/CN110633517B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6678571B1 (en) * | 2000-07-07 | 2004-01-13 | 3D Systems, Inc. | Micro-slicing contour smoothing technique |
CN101373543A (zh) * | 2008-09-28 | 2009-02-25 | 武汉大学 | 三维网格模型的快速剖切方法 |
CN101441780A (zh) * | 2008-11-05 | 2009-05-27 | 武汉大学 | 三维网格模型的剖切方法 |
CN105389410A (zh) * | 2014-08-25 | 2016-03-09 | 株式会社三丰 | 三维模型生成方法和三维模型生成系统 |
CN105550468A (zh) * | 2016-01-18 | 2016-05-04 | 沈阳工业大学 | 基于层变边数组和邻接边顺序链表的等层厚切片算法 |
CN106373184A (zh) * | 2016-08-30 | 2017-02-01 | 苏州紫金港智能制造装备有限公司 | 一种三维打印模型摆放所需支撑量快速估算方法 |
CN109360260A (zh) * | 2018-10-22 | 2019-02-19 | 南京科远自动化集团股份有限公司 | 一种三角网格三维模型的切挖重构算法 |
CN109934928A (zh) * | 2019-03-18 | 2019-06-25 | 江西博微新技术有限公司 | 基于骨架化的三维模型简化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110633517A (zh) | 2019-12-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109658431B (zh) | 基于区域生长的岩体点云平面提取方法 | |
Jalba et al. | Surface and curve skeletonization of large 3D models on the GPU | |
JP6294072B2 (ja) | 剛体運動によって変換される幾何学要素 | |
WO2012071688A1 (zh) | 基干感知信息的三维模型形狀分析方法 | |
CN105427317A (zh) | 一种适用于多视角自动化配准多站地面激光点云数据的方法 | |
JP2008527473A (ja) | 3次元モデルの検索方法、検索装置及び検索プログラム | |
CN103838907A (zh) | 基于stl模型的曲面切割轨迹获得方法 | |
CN103632371A (zh) | 基于兼容性网格分割的骨骼参数计算方法 | |
CN115661374B (zh) | 一种基于空间划分和模型体素化的快速检索方法 | |
CN116452583B (zh) | 点云缺陷检测方法、装置、系统及存储介质 | |
CN107622530A (zh) | 一种高效鲁棒的三角网切割方法 | |
CN110633517B (zh) | 一种用于三维场景的高效切片方法 | |
WO2018053637A1 (en) | Geometric modelling for facilitating simulation for manufacturing operations | |
CN114398691A (zh) | 一种轮胎模具二维视图智能设计方法及设备 | |
CN107993242B (zh) | 基于机载LiDAR点云数据缺失区域边界提取方法 | |
CN112734934A (zh) | 一种基于相交边映射的stl模型3d打印切片方法 | |
Sankaranarayanan et al. | A Fast k-Neighborhood Algorithm for Large Point-Clouds. | |
Zhao et al. | A new k nearest neighbours algorithm using cell grids for 3d scattered point cloud | |
CN115546116A (zh) | 全覆盖式岩体不连续面提取与间距计算方法及系统 | |
CN112184564A (zh) | 一种基于半边排序法的三维孔洞补偿方法 | |
CN112184911B (zh) | 一种非流行网格模型切片处理方法 | |
Li et al. | A unified method for invalid 2D loop removal in tool-path generation | |
CN113920276B (zh) | 一种三角网格模型的特征识别方法及其特征识别系统 | |
CN113378325A (zh) | 基于面积法的面向曲面零件测量点的网格面片检索方法 | |
CN115270250B (zh) | 基于bim的基础大样详图的自动校审方法、系统及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |