CN115187589A - 多边形修正及生成方法、装置、设备及可读存储介质 - Google Patents
多边形修正及生成方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN115187589A CN115187589A CN202211088780.0A CN202211088780A CN115187589A CN 115187589 A CN115187589 A CN 115187589A CN 202211088780 A CN202211088780 A CN 202211088780A CN 115187589 A CN115187589 A CN 115187589A
- Authority
- CN
- China
- Prior art keywords
- polygon
- polygons
- determining
- simple polygon
- endpoint
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/0002—Inspection of images, e.g. flaw detection
- G06T7/0004—Industrial image inspection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/10—Segmentation; Edge detection
- G06T7/11—Region-based segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/60—Analysis of geometric attributes
- G06T7/62—Analysis of geometric attributes of area, perimeter, diameter or volume
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Geometry (AREA)
- Quality & Reliability (AREA)
- Image Generation (AREA)
Abstract
本申请提供了一种多边形修正及生成方法、装置、设备及计算机可读存储介质;方法包括:获取待修正多边形,基于待修正多边形的原始外边界生成至少两个简单多边形;确定至少两个简单多边形之间的包含关系;基于至少两个简单多边形之间的包含关系从至少两个简单多边形中确定出作为修正后的多边形的新外边界的至少一个第一简单多边形;基于待修正多边形的原始孔洞和第二简单多边形中的至少一种确定各个第一简单多边形对应的内部孔洞;基于各个第一简单多边形和各个第一简单多边形各自对应的内部孔洞生成各个修正后的多边形。通过本申请,能够对生成的非简单多边形进行修正得到简单多边形,从而提高计算几何程序的鲁棒性。
Description
技术领域
本申请涉及数据处理技术,尤其涉及一种多边形修正及生成方法、装置、设备及计算机可读存储介质。
背景技术
带孔多边形表示二维平面上的一块有效区域,是很多重要几何算法的输入或者输出表达方式。相关技术中生成带孔多边形的实现方式一般有以下两类:1)由预设的几何算法生成;2)由基础图元首先构造布置,然后从布置中生成带孔多边形。在实践中发现:利用预设的几何算法无法保证带孔多边形的外边界为简单多边形。同样由基础图像构造出的布置也无法保证带孔多边形的外边界为简单多边形。虽然两种情况都可以表示二维空间中的有效区域,但是其外边界都不是简单多边形,只是相对简单多边形。这类带孔多边形虽然有效,但是无法保证某些算法正确执行的问题,给计算几何程序的鲁棒性提出了很大挑战,并且增加了开发者的调试负担。
发明内容
本申请实施例提供一种多边形修正及生成方法、装置及计算机可读存储介质,能够对生成的非简单多边形进行修正,得到简单多边形,从而提高计算几何程序的鲁棒性。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种多边形修正方法,包括:
获取待修正多边形,基于所述待修正多边形生成至少两个简单多边形;
确定所述至少两个简单多边形之间的包含关系;
基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第一简单多边形,将所述第一简单多边形作为修正后的多边形的新外边界;
基于所述待修正多边形的原始孔洞和第二简单多边形中的至少一种确定各个第一简单多边形对应的内部孔洞,所述第二简单多边形为所述至少两个简单多边形中除所述第一简单多边形之外的其他多边形;
基于所述各个第一简单多边形和所述各个第一简单多边形各自对应的内部孔洞生成各个修正后的多边形。
本申请实施例提供一种多边形生成方法,包括:
获取待处理的多个线段,对所述多个线段进行分割处理,得到多个目标线段,其中,不同目标线段之间最多在端点相交;
基于所述多个目标线段,建立目标线段的端点与目标线段之间的映射集合;
基于所述映射集合,确定能够构成环形的目标端点,并基于所述能够构成环形的目标端点生成简单多边形;
当生成的简单多边形为至少两个时,确定至少两个简单多边形之间的包含关系;
基于所述至少两个简单多边形之间的包含关系从所述至少两个简单多边形中确定出至少一个第三简单多边形,将所述第三简单多边形作为带孔多边形的外边界;
基于第四简单多边形确定各个第三简单多边形对应的内部孔洞,所述第四简单多边形为所述至少两个简单多边形中除所述第三简单多边形之外的其他多边形;
基于所述各个第三简单多边形和所述各个第三简单多边形各自对应的内部孔洞生成各个带孔多边形。
本申请实施例提供一种多边形修正装置,包括:
第一生成模块,用于获取待修正多边形,基于所述待修正多边形生成至少两个简单多边形;
第一确定模块,用于确定所述至少两个简单多边形之间的包含关系;
第二确定模块,用于基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第一简单多边形,将所述第一简单多边形作为修正后的多边形的新外边界;
第三确定模块,用于基于所述待修正多边形的原始孔洞和第二简单多边形中的至少一种确定各个第一简单多边形对应的内部孔洞,所述第二简单多边形为所述至少两个简单多边形中除所述第一简单多边形之外的其他多边形;
第二生成模块,用于基于所述各个第一简单多边形和所述各个第一简单多边形各自对应的内部孔洞生成各个修正后的多边形。
本申请实施例提供一种多边形生成装置,包括:
线段分割模块,用于获取待处理的多个线段,对所述多个线段进行分割处理,得到多个目标线段,其中,不同目标线段之间最多在端点相交;
映射建立模块,用于基于所述多个目标线段,建立目标线段的端点与目标线段之间的映射集合;
第三生成模块,用于基于所述映射集合,确定能够构成环形的目标端点,并基于所述能够构成环形的目标端点生成简单多边形;
第四确定模块,用于当生成的简单多边形为至少两个时,确定至少两个简单多边形之间的包含关系;
第五确定模块,用于基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第三简单多边形;
第六确定模块,用于基于第四简单多边形确定各个第三简单多边形对应的内部孔洞,所述第四简单多边形为所述至少两个简单多边形中除所述第三简单多边形之外的其他多边形;
第四生成模块,用于基于所述各个第三简单多边形和所述各个第三简单多边形各自对应的内部孔洞生成各个带孔多边形。
本申请实施例提供一种计算机设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的多边形修正方法或本申请实施例提供的多边形生成方法。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本申请实施例提供的多边形修正方法或本申请实施例提供的多边形生成方法。
本申请实施例提供一种计算机程序产品,包括计算机程序或指令,所述计算机程序或指令被处理器执行时实现本申请实施例提供的多边形修正方法或本申请实施例提供的多边形生成方法。
本申请实施例具有以下有益效果:
在获取到待修正多边形之后,首先基于所述待修正多边形的原始外边界生成至少两个简单多边形,再确定至少两个简单多边形之间的包含关系,并基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第一简单多边形,将所述第一简单多边形作为修正后的多边形的新外边界;然后再基于待修正多边形的原始孔洞和第二简单多边形确定各个第一简单多边形对应的真正的内部孔洞,最后基于所述各个第一简单多边形和所述各个第一简单多边形各自对应的内部孔洞生成各个修正后的多边形,由于至少两个简单多边形是基于待修正多边形的原始外边界生成的,也就是说,仅仅是对原始外边界上的拓扑结构进行改变,例如对顶点的连接顺序和连接关系进行改变,能够保证在不改变几何形状的前提下,通过修正原始外边界、内部孔洞及其包含关系,使得修正后的多边形均为简单多边形,从而提高利用修正后的多边形在执行后续几何程序时的鲁棒性。
附图说明
图1A为简单多边形、相对简单多边形和非相对简单多边形的示意图;
图1B为点集的凸包示意图;
图1C为两个向量集合的闵可夫斯基和示意图;
图1D利用平面上的图元生成面、边、环、孤立点的示意图;
图1E为受限德劳内三角剖分示意图;
图2是本申请实施例提供的多边形修正系统的网络架构示意图;
图3是本申请实施例提供的服务器的结构示意图;
图4是本申请实施例提供的多边形修正方法的一种实现流程示意图;
图5为本申请实施例提供的基于待修正多边形的原始外边界生成简单多边形的实现流程示意图;
图6为本申请实施例提供的多边形生成方法的一种实现流程示意图;
图7为本申请实施例提供的外边界不满足简单多边形条件的带孔多边形示意图;
图8为本申请实施例提供的对外边界不满足简单多边形条件的带孔多边形进行修正后得到的多边形示意图;
图9为本申请实施例提供的内部孔洞不满足相对简单多边形条件的带孔多边形及对该带孔多边形进行修正后得到的多边形示意图;
图10为本申请实施例提供的无序线段构成的多边形示意图;
图11为本申请实施例提供的基于无序线段生成的简单多边形的示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)简单多边形(simple polygon):多边形是由二维平面上的三条或者三条以上的线段首尾顺次相连所形成的封闭形状。满足如下条件的多边形被认为是简单多边形:
封闭:其第一条线段的起点和最后一条线段的终点必须是同一个顶点;
简单:“简单”是指多边形上的所有线段之间都不会在内部相交,并且所有顶点的度数都为2。这样的多边形具有明确定义的内部和外部,并且在拓扑上与圆盘同胚。满足“简单”条件的多边形也叫Jordan多边形。
朝向:多边形上的顶点呈逆时针方向排列,这样每个线段的左侧就代表多边形的内部区域,右侧代表外部区域。
2)相对简单多边形(relative simple polygon):相比于简单多边形需要满足的三个条件,相对简单多边形对于“简单”的约束条件有所放松,它允许多边形存在度数大于2的顶点,但必须是可定向的。例如对于图1A而言,110是简单多边形(因此也一定是相对简单多边形);111不是简单多边形,但却是相对简单多边形;113既不是简单多边形,也不是相对简单多边形。
3)带孔多边形(Polygon with holes):带孔多边形是由一个外边界和若干个包含在外边界内部的孔洞所构成。为了保证以带孔多边形作为输入的很多几何算法(例如布尔运算、骨架提取、三角化等)的正确执行,在本发明描述中,我们规定带孔多边形必须满足如下条件才被认为是合法的:
封闭:其外边界和所有内部孔洞都必须是封闭的;
简单:其外边界和所有内部孔洞都是简单的;
朝向:外边界上的顶点呈逆时针方向排列,每个内部孔洞上的顶点必须呈顺时针方向排列;
孔洞关系:需要满足如下两个条件:1)所有内部孔洞必须被包含在外边界内部,并且和外边界不相交,除非交点是外边界和内部孔洞上的顶点;2)内部孔洞之间必须是不相交的,除非交点是两个孔洞上的顶点。
4)多边形集(Polygon set):平面上由一系列带孔多边形和简单多边形所构成的集合,称为多边形集。它可以表示平面上的若干块有效区域。
5)凸包(Convex hull):在一个实数向量空间中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。在二维欧几里得空间中,凸包可以想象为一条刚好包含所有点的橡皮圈,如图1B所示,其中多边形121表示黑色点集所对应的凸包。
6)闵可夫斯基和(Minkowski sum):给定向量集合A和B,定义它们的闵可夫斯基和为。例如对于图1C左侧的131和132区域而言,其闵可夫斯基和如最右侧的133所示,闵可夫斯基和可以用带孔多边形来表示。
7)布置(Arrangement):对于平面上的一组图元(包括线段、顶点等),它们的几何形状和拓扑连接关系可以形成对平面的一个划分。这些划分可以在平面上形成面、边、环、孤立点等几何元素。例如对于图1D而言,这组图元可以形成f 0 ,f 1 ,f 2 ,f 3 ,f 4 等面,u 1 ,u 2 等孤立点,以及e,e prev ,e next 等对应的边。
9)2D直线骨架(2D straight skeleton):2D直线骨架是对带孔多边形内部的一个划分,它由带孔多边形内部区域中的相邻边的角平分线在内部相交而形成,利用2D直线骨架可以方便生成带孔多边形朝内和朝外的偏置(offset)结果如图1D所示。
10)维诺图(Voronoi Diagram):又叫泰森多边形,由一组连接相邻site的垂直平分线组成的连续多边形构成。
11)受限德劳内三角化(Constrained Delaunay Triangulation):平面上点集P的德劳内三角化是一种三角剖分 DT(P),使得在 P 中没有点严格处于 DT(P) 中任意一个三角形外接圆的内部。受限德劳内三角化是指在给定了一些限制边的情况下的德劳内三角化。例如对于图1E这样一个“回”字形,如果将其外边界和内部孔洞的边都作为受限边(如黑色加粗线段所示),则其Delaunay三角化结果为黑色加粗线段和灰色线段所构成的三角形。
针对相关技术中利用预设的几何算法以及由基础图元构造布置,或者从布置中生成带孔多边形的技术方案,所生成的带孔多边形虽然有效,但是无法保证是简单多边形而造成某些算法正确执行的问题,本申请实施例提供一种多边形修正和生成算法,可以在保持多边形有效区域的前提下,仅仅通过修正外边界和内部孔洞的拓扑连接,就可以使得带孔多边形满足简单多边形的条件。利用本申请实施例提供的多边形修正方法,可以无需修改已有的带孔多边形生成算法,只需要将基于该多边形生成算法所生成的结果作为本申请实施例提供的多边形修正方法的输入,然后生成简单带孔多边形,就可以作为下游一系列几何算法的输入。
本申请实施例提供一种多边形修正及生成方法、装置、设备和计算机可读存储介质,能够对生成的非简单多边形进行修正,得到简单多边形,从而提高计算几何程序的鲁棒性。下面说明本申请实施例提供的计算机设备的示例性应用,本申请实施例提供的计算机设备可以实施为笔记本电脑,平板电脑,台式计算机,机顶盒,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)等各种类型的用户终端,也可以实施为服务器。下面,将说明设备实施为服务器时示例性应用。
本申请实施例提供的多边形修正及生成方法,可以应用于多种场景,例如应用于装箱场景、维诺图确定场景或者三维模型多视角可见区域提取场景。这里以本申请实施例提供的多边形修正方法应用于三维模型多视角可见区域提取场景为例进行说明。参见图2,图2是本申请实施例提供的多边形修正系统100的架构示意图,该网络架构包括:第一终端200、第二终端300和服务器400,其中,第一终端200和服务器400以及第二终端300和服务器400之间通过网络(图2中未示出)建立有通信连接,网络可以是广域网或者局域网,又或者是二者的组合。
第一终端200可以是模型设计终端,模型设计人员可以利用第一终端200设计出虚拟对象的三维模型,并且可以设计出不同视角下的三维模型,然后第一终端200将不同视角下的模型发送至服务器400,服务器400获取不同视角下的模型信息,并基于各个视角的模型信息,确定在所述各个视角对应的模型可见区域,再将所述各个视角对应的模型可见区域进行合并处理,得到所述三维模型对应的模型可见区域;三维模型对应的模型可见区域可以理解为是一个多边形集,该多边形集中包括多个带孔多边形,然后采用受限德劳内三角化方法对多个带孔多边形进行三角化。由于在对各个视角对应的模型可见区域进行合并处理时,是采用CGAL中的布尔运算确定的,此时得到的带孔多边形不一定全部是简单多边形,导致受限德劳内三角化方法无法正确执行。为此,在得到三维模型对应的模型可见区域之后,对于三维模型对应的模型可见区域中不为简单多边形的带孔多边形采用本申请实施例提供的多边形修正方法进行修正,然后将修正后的多边形作为受限德劳内三角化方法的输入,可以保证受限德劳内三角化方法的正确执行,从而得到处理后的三维模型。服务器400再将处理后的三维模型发送至第二终端300。第二终端300可以是渲染终端,第二终端300利用处理后的三维模型进行多视角的二维渲染,由于处理后的三维模型中仅包括模型的可见区域,因此,相对于原始的三维模型,减少了模型数据量,因此在进行二维渲染时,也只需要对可见区域进行渲染,从而降低了进行二维渲染时的资源开销,提高渲染效率。
在一些实施例中,服务器400可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。第一终端200和第二终端300可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、车载智能终端等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。
参见图3,图3为本申请实施例提供的服务器400的结构示意图,图3所示的服务器400包括:至少一个处理器410、至少一个网络接口420、总线系统430和存储器440。服务器400中的各个组件通过总线系统430耦合在一起。可理解,总线系统430用于实现这些组件之间的连接通信。总线系统430除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图3中将各种总线都标为总线系统430。
处理器410可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
存储器440可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器440可选地包括在物理位置上远离处理器410的一个或多个存储设备。
存储器440包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器440旨在包括任意适合类型的存储器。
在一些实施例中,存储器440能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统441,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块442,用于经由一个或多个(有线或无线)网络接口420到达其他计算设备,示例性的网络接口420包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
在一些实施例中,本申请实施例提供的装置可以采用软件方式实现,图3示出了存储在存储器440中的多边形修正装置443,其可以是程序和插件等形式的软件,包括以下软件模块:第一生成模块4431、第一确定模块4432、第二确定模块4433、第三确定模块4434和第二生成模块4435,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
在另一些实施例中,本申请实施例提供的装置可以采用硬件方式实现,作为示例,本申请实施例提供的装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的多边形修正方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific Integrated Circuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,ComplexProgrammable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable GateArray)或其他电子元件。
将结合本申请实施例提供的服务器的示例性应用和实施,说明本申请实施例提供的多边形修正及生成方法。
本申请实施例提供一种多边形修正方法,应用于计算机设备,该计算机设备可以是终端,也可以是服务器,以下以计算机设备为服务器为例进行说明。参见图4,图4是本申请实施例提供的多边形修正方法的流程示意图,将结合图4对本申请实施例提供的多边形修正方法的各个步骤进行说明。
步骤S101,获取待修正多边形,基于所述待修正多边形生成至少两个简单多边形。
在本申请实施例中,待修正多边形为不满足简单多边形条件的多边形,例如,待修正多边形可以为原始外边界不满足简单多边形条件但满足相对简单多边形条件、原始孔洞满足简单多边形条件的带孔多边形,待修正多边形也可以为原始外边界和原始孔洞均不满足简单多边形条件但满足相对简单多边形条件的多边形。或者待修正多边形可以为原始外边界和原始孔洞均不满足简单多边形条件但满足相对简单多边形条件的多边形。
待修正多边形的原始外边界和原始孔洞是指在对待修正多边形进行修正之前,原本的外边界和内部孔洞。
其中,简单多边形条件包括:多边形第一条线段的起点和最后一条线段的终点为同一顶点,且多边形上的所有线段之间在多边形内部不相交,且各个顶点的度均为2,且顶点排列方向为逆时针。相对简单多边形条件包括多边形第一条线段的起点和最后一条线段的终点为同一顶点,且多边形上的所有线段之间在多边形内部不相交,且顶点排列方向为逆时针。
在获取到待修正多边形之后,可以基于待修正多边形的拓扑结构信息,确定待修正多边形的原始外边界和原始孔洞,其中,待修正多边形的拓扑信息包括各个顶点的顶点标识和顶点之间的连接关系。
该步骤在实现时,如果待修正多边形的外边界为相对简单多边形,原始孔洞为简单多边形,那么只需基于待修正多边形的外边界生成多个简单多边形,不需要对原始孔洞进行处理,如果待修正多边形的原始孔洞和原始外边界均不满足简单多边形条件,那么需要基于原始外边界和原始孔洞生成多个简单多边形。
在基于待修正多边形的原始边界生成至少两个简单多边形的实现时,可以首先定义一个“后进先出”的起点栈,然后依次压入待修正多边形中的顶点。每压入一个顶点,判断当前起点栈中的元素是否可以成环,如果是,则及时移出已经成环的部分,并生成一个简单多边形。这样循环直到所有顶点都处理完成并且栈为空。
基于待修正多边形的原始外边界和原始孔洞生成至少两个简单多边形在实现时,是基于原始外边界和原始孔洞分别生成多个简单多边形,并且基于原始孔洞生成至少两个简单多边形时的实现过程与基于原始外边界生成简单多边形的过程是类似的。
步骤S102,确定所述至少两个简单多边形之间的包含关系。
在该步骤中,需要确定简单多边形两两之间的包含关系。由于至少两个简单多边形之间是不会相交的,最多有共同的顶点,因此该步骤在实现时,首先从至少两个简单多边形中获取一个简单多边形,然后依次确定该简单多边形与其他简单多边形之间的包含关系,之后再从除该简单多边形之外的其他多边形中选择一个简单多边形,再依次确定本次选择出的简单多边形和剩余简单多边形之间的两两包含关系。以此类推,直至确定出至少两个简单多边形中所有两两简单多边形之间的包含关系。
这里,以确定第p个简单多边形与第q个简单多边形之间的包含关系为例进行说明。在实现时,可以获取第p个简单多边形的一个顶点,判断该顶点是位于第q个简单多边形的内部还是外部,如果位于第p个简单多边形的内部,说明第q个简单多边形包含第p个简单多边形,此时结束判断;如果该顶点位于第q个简单多边形的外部,说明第q个简单多边形不包含第p个简单多边形,此时也可以结束判断;如果该顶点既不位于第q个简单多边形的内部,也不位于第p个简单多边形的外部,说明该顶点为第p个简单多边形和第q个简单多边形的共同顶点,此时需要再次获取第p个简单多边形的其余顶点,继续判断,直至确定出第q个简单多边形是否包含第p个简单多边形。
步骤S103,基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第一简单多边形。
该步骤在实现时,当待修正多边形的原始外边界满足非简单多边形条件而待修正多边形的原始孔洞满足简单多边形条件时,将至少两个简单多边形中不被任意一个除自身之外的其他简单多边形包含的简单多边形确定为第一简单多边形,将该第一简单多边形作为修正后的多边形的新外边界;当待修正多边形的原始外边界和内部孔洞不满足简单多边形条件,该步骤在实现时,确定各个简单多边形的被包含次数,并将被包含次数为偶数的简单多边形确定为第一简单多边形,该第一简单多边形是修正后的多边形的新外边界。
步骤S104,基于所述待修正多边形的原始孔洞和第二简单多边形中的至少一种确定各个第一简单多边形对应的内部孔洞。
其中,第二简单多边形为所述至少两个简单多边形中除所述第一简单多边形之外的其他多边形,也即第二简单多边形为新确定出的内部孔洞。
与步骤S103对应,当待修正多边形的原始外边界满足相对简单多边形条件且待修正多边形的原始孔洞满足简单多边形条件,该步骤在实现时,基于步骤S103判断多边形两两之间的包含关系的实现方式,确定被各个第一简单多边形包含的原始孔洞和第二简单多边形,从而确定出各个第一简单多边形对应的内部孔洞。当待修正多边形的原始外边界和待修正多边形的原始孔洞均不满足简单多边形条件,该步骤在实现时,首先确定出各个第一简单多边形包含的第二简单多边形,将这些第二简单多边形确定为候选孔洞,然后将没有被除自身之外的其他候选孔洞包含的候选孔洞确定为第一简单多边形对应的内部孔洞。
步骤S105,基于所述各个第一简单多边形和所述各个第一简单多边形各自对应的内部孔洞生成各个修正后的多边形。
在确定出各个第一简单多边形实际对应的内部孔洞之后,就可以基于各个第一简单多边形和各个第一简单多边形实际对应的内部孔洞,确定出各个修正后的多边形。
在一些实施例中,在生成各个修正后的多边形之后,可以利用修正后的多边形进行后续的几何算法,例如对于自动2UV展开项目中的Nest工具,在计算多边形的外部偏置之后,采用本申请实施例提供的多边形修正方法进行修正,然后用修正结果来计算和剩余纹理空间的闵可夫斯基和,可以使得计算闵可夫斯基和的成功率从92%提高到100%。
在本申请实施例提供的多边形修正方法中,在获取到待修正多边形之后,首先基于所述待修正多边形生成至少两个简单多边形,再确定至少两个简单多边形之间的包含关系,并基于所述至少两个简单多边形之间的包含关系从所述至少两个简单多边形中确定出作为新外边界的至少一个第一简单多边形;然后再基于待修正多边形的原始孔洞和第二简单多边形中的至少一种确定各个第一简单多边形对应的真正的内部孔洞,最后基于所述各个第一简单多边形和所述各个第一简单多边形各自对应的内部孔洞生成各个修正后的多边形,由于至少两个简单多边形是基于待修正多边形生成的,也就是说,仅仅是对待修正多边形的拓扑结构进行改变,例如对顶点的连接顺序和连接关系进行改变,能够保证在不改变几何形状的前提下,通过修正原始外边界、内部孔洞及其包含关系,使得修正后的多边形均为简单多边形,从而提高利用修正后的多边形在执行后续几何程序时的鲁棒性。
在一些实施例中,上述步骤S101中的“基于所述待修正多边形生成至少两个简单多边形”在实现时,基于待修正多边形中原始外边界和待修正多边形的原始孔洞是否满足简单多边形条件而有不同的实现方式,其中:
当所述待修正多边形的原始外边界满足相对简单多边形条件且待修正多边形的原始孔洞满足简单多边形条件时,那么说明原始孔洞本身就是简单多边形,不需要进行处理,只需要基于所述待修正多边形的原始外边界生成至少两个简单多边形;
当所述待修正多边形的原始外边界和待修正多边形的原始孔洞均不满足简单多边形条件时,说明需要对原始外边界和原始孔洞都进行处理,此时基于所述原始外边界和所述原始孔洞生成至少两个简单多边形。
以下对基于待修正多边形的原始外边界生成至少两个简单多边形的实现过程进行说明,该实现过程可以通过图5所示的步骤S1011至步骤S1019实现,以下结合图5对各个步骤进行说明。
步骤S1011,获取所述待修正多边形的原始外边界上各条边的起点。
在本申请实施例中,可以基于待修正多边形的拓扑结构信息确定原始外边界上各条边的起点,由于待修正多边形的拓扑信息包括该待修正多边形的原始外边界上的顶点,以及原始外边界上各条边的顶点索引,基于该顶点索引可以确定出原始外边界上各条边的起点,并且此时获取到的原始外边界上各条边的起点是根据不同边的连接关系按顺序排列的。
步骤S1012,将第i个起点确定为当前处理起点。
其中,i=1,2,…,N,N为原始外边界上的起点总数。
步骤S1013,将所述当前处理起点压入预先创建的起点栈中。
该起点栈是用于存储原始外边界上各条边的起点的栈结构,向栈中添加元素,此过程被称为“进栈”(也可称为入栈或压栈),从栈中提取出指定元素,此过程被称为“出栈”(也可称为弹栈)。将当前处理起点压入起点栈中,那么此时当前处理起点位于起点栈的栈顶。
步骤S1014,确定当前处理起点是否还存在于栈顶之外的其他位置。
其中,如果当前处理起点还存在于栈顶之外的其他位置,说明栈内存在可以成环的起点集合,此时进入步骤S1015;如果当前处理起点不存在与栈顶之外的其他位置,说明栈内不存在可以成环的起点集合,此时进入步骤S1017。
步骤S1015,对所述其他位置之前的其他起点与所述当前处理起点进行出栈处理。
这里需要说明的是,此时并没有将非栈顶位置的当前处理起点出栈,也就是说对其他起点与当前处理起点出栈之后,栈顶元素仍然为当前处理起点。
步骤S1016,将所述其他起点与所述当前处理起点构成简单多边形。
该步骤在实现时,是按照出栈顺序,依次连接当前处理起点和其他起点,构成初始多边形,如果该初始多边形的顶点排列方向为逆时针,说明该初始多边形即为简单多边形,如果初始多边形的顶点排列方向为顺时针,则将顶点连接方向反向,从而得到简单多边形。
步骤S1017,确定是否已经对所有起点均进行入栈处理。
其中,如果没有对所有起点进行入栈处理,进入步骤S1018;如果已经对所有起点进行入栈处理,进入步骤S1019。
步骤S1018,将所述当前处理起点的下一个起点更新为当前处理起点。
此时,转入步骤S1013,也即将所述当前处理起点压入所述起点栈中,并执行后续步骤。
步骤S1019,确定起点栈不为空,将所述起点栈中的各个起点构成简单多边形。
该步骤在实现时,首先将起点栈中的各个起点依次出栈,并按照出栈顺序将各个起点依次连接,构成初始多边形,同样需要判断该初始多边形的顶点排列方向,如果该初始多边形的顶点排列方向为逆时针则将该初始多边形确定为简单多边形,如果该初始多边形的顶点排列方向为顺时针,则将初始多边形的顶点连接方向进行反向,将得到的反向后的多边形确定为简单多边形。
在上述步骤S1011至步骤S1019所在的实施例中,通过将待修正多边形的原始外边界上的各个顶点入栈的方式,确定出能够成环的各个顶点,并对能够成环的各个顶点进行出栈并生成简单多边形,然后再继续对原始外边界上的顶点继续入栈,直至判断完所有的顶点,能够保证根据原始外边界生成的均为简单多边形,为后续确定不同简单多边形的包含关系提供数据基础。
在一些实施例中,上述步骤S1016“将所述其他起点与所述当前处理起点构成简单多边形”,可以通过下述的步骤S161至步骤S165实现,以下对各个步骤进行说明。
步骤S161,将所述当前处理起点和所述其他起点按照出栈顺序依次相连,得到初始多边形。
步骤S162,确定所述初始多边形的顶点排列方向。
该步骤在实现时,可以从初始多边形上任意选择两条相邻的边,假设为第一连接边和第二连接边,第一连接边对应第一向量,第二连接边对应第二向量,其中第一连接边对应的第一向量是基于第一连接边上两个顶点的坐标确定的,第二连接边对应的第二向量是基于第二连接边上两个顶点的坐标确定的,然后通过给z轴补0将第一向量和第二向量分别变为三维向量,并计算第一三维向量和第二三维向量的叉积,如果叉积的z轴分量大于零,确定顶点排列顺序为逆时针,如果叉积的z轴分量小于零则为顺时针。
步骤S163,确定顶点排列方向是否为顺时针。
其中,当顶点排列方向为顺时针时,进入步骤S164;当顶点排列方向为逆时针时,进入步骤S165。
步骤S164,对所述初始多边形进行反向处理,得到简单多边形。
对初始多边形进行反向处理,在实现时,是将顶点的连接顺序进行反向,例如初始多边形有四个顶点,分别为A、B、C、D,连接顺序为A-B-C-D-A,对该初始多边形进行反向处理,也即将连接顺序更新为A-D-C-B-A,此时得到的简单多边形的顶点排列方向为逆时针。
步骤S165,将该初始多边形确定为简单多边形。
通过上述步骤S161至步骤S165,将各个顶点按照出栈顺序依次连接,然后得到初始多边形,该初始多边形封闭且顶点满足度数为2,那么为了使得初始多边形为简单多边形,需要保证初始多边形的顶点为逆时针排序,因此如果初始多边形的顶点为逆时针排序,那么将初始多边形确定为简单多边形;如果初始多边形的顶点为顺时针排序,那么此时将初始多边形的顶点排列方向进行反向,使得多边形是逆时针方向,得到简单多边形。
在一些实施例中,上述步骤S102“确定所述至少两个简单多边形之间的包含关系”,可以通过以下步骤实现:
步骤S1021,从所述至少两个简单多边形中获取第p个简单多边形和第q个简单多边形。
其中,p=1,2,…,M,q=1,2,…,M,且p不等于q,该步骤也即为从至少两个简单多边形中选择出任意两个简单多边形。
步骤S1022,获取所述第p个简单多边形的第s个顶点。
s=1,2,…,S,S为第p个简单多边形的顶点总数。
步骤S1023,确定第s个顶点是否位于第q个简单多边形的内部。
其中,确定第s个顶点是否位于第q个简单多边形的内部在实现时,可以基于第q个简单多边形中各个顶点的坐标,确定最大x坐标和最小x坐标以及最大y坐标和最小y坐标,然后基于第s个顶点的坐标,确定第s个顶点的x坐标是否大于最小x坐标且小于最大x坐标,且第s个顶点的y坐标是否大于最小y坐标且小于最大y坐标。如果第s个顶点的x坐标大于最小x坐标且小于最大x坐标,且第s个顶点的y坐标大于最小y坐标且小于最大y坐标,确定所述第s个顶点位于所述第q个简单多边形内部,此时进入步骤S1024,如果第s个顶点的x坐标小于最小x坐标或者大于最大x坐标,或者第s个顶点的y坐标小于最小y坐标或者大于最大y坐标,确定第s个顶点不位于第q个简单多边形内部,此时进入步骤S1025。
步骤S1024,确定所述第q个简单多边形包含所述第p个简单多边形。
由于第p个简单多边形和第q个简单多边形并不相交,因此如果第p个简单多边形中存在一个顶点位于第q个简单多边形内部,说明其他顶点也位于第q个简单多边形内部,或者与第q个简单多边形共用顶点,此时就可以得出第q个简单多边形包含第p个简单多边形。
步骤S1025,确定第s个顶点是否位于所述第q个简单多边形外部。
其中,如果第s个顶点的x坐标小于最小x坐标或者大于最大x坐标,或者第s个顶点的y坐标小于最小y坐标或者大于最大y坐标,确定所述第s个顶点位于所述第q个简单多边形外部,此时进入步骤S1026;当确定第s个顶点不位于第q个简单多边形外部,也不位于第q个简单多边形内部时,说明第s个顶点为第p个简单多边形和第q个简单多边形的共同顶点,此时进入步骤S1027。
步骤S1026,确定所述第q个简单多边形不包含所述第p个简单多边形。
步骤S1027,获取第s+1个顶点,并基于第s+1个顶点确定第p个简单多边形和第q个简单多边形的包含关系。
该步骤在实现时,与步骤S1023至步骤S1026类似,如果第s+1个顶点位于第q个简单多边形内部,确定第q个简单多边形包含第p个简单多边形,如果第s+1个顶点位于第q个简单多边形外部,确定第q个简单多边形不包含第p个简单多边形。
通过上述步骤S1021至步骤S1026,能够基于第p个简单多边形的一个或多个顶点是否位于第q个简单多边形的内部,由于简单多边形之间不相交,因此当第p个简单多边形的一个顶点位于第q个简单多边形内部,则可以确定第p个简单多边形位于第q个简单多边形内部,也即第q个简单多边形包含第p个简单多边形,如果第p个简单多边形存在一个顶点位于第q个简单多边形外部,就可以确定第p个简单多边形位于第q个简单多边形外部,也即第q个简单多边形不包含第p个简单多边形,能够提高确定两两简单多边形之间包含关系的计算效率。
在一些实施例中,上述步骤S103“基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第一简单多边形”,基于待修正多边形中原始外边界和待修正多边形的原始孔洞是否满足相对简单多边形条件,有不同的实现方式,以下分别进行说明。
当所述待修正多边形的原始外边界满足相对简单多边形条件且待修正多边形的原始孔洞孔洞满足简单多边形条件时,由于在步骤S101中是仅需要对原始外边界的拓扑结构进行改变,得到的至少两个简单多边形,那么此时得到的简单多边形如果不被其他简单多边形包含,就必然是外边界,此时该步骤通过以下方式实现:
基于所述至少两个简单多边形之间的包含关系,将所述至少两个简单多边形中不被任意一个简单多边形包含的简单多边形确定为第一简单多边形。
对应地,当待修正多边形的原始外边界满足相对简单多边形条件且待修正多边形的原始孔洞满足简单多边形条件时,该步骤S104“基于所述待修正多边形的原始孔洞和第二简单多边形中的至少一种确定各个第一简单多边形对应的内部孔洞”,可以通过以下步骤实现:
步骤S1041A,基于所述至少两个简单多边形之间的包含关系,确定第一简单多边形包含的第二简单多边形。
由于在步骤S102中已经确定出至少两个简单多边形中两两简单多边形之间的包含关系,那么也就能基于包含关系,确定出第一简单多边形包含的第二简单多边形。
步骤S1042A,将存在处于所述第一简单多边形内部顶点的原始孔洞确定为所述第一简单多边形包含的原始孔洞。
在本申请实施例中,如果某一个原始孔洞中存在处于第一简单多边形内部的顶点,那么说明该原始孔洞位于该第一简单多边形的内部,也即第一简单多边形包含该原始孔洞。
步骤S1043A,将所述第一简单多边形包含的第二简单多边形和所述第一简单多边形包含的原始孔洞确定为所述第一简单多边形对应的内部孔洞。
通过上述步骤S1041A至步骤S1043A,可以确定出作为新外边界的第一简单多边形所包含的内部孔洞,因此可以在后续步骤中基于第一简单多边形和第一简单多边形对应的内部孔洞生成带孔多边形,并且该带孔多边形为简单多边形,能够保证在后续的几何程序能够正确执行,提高几何程序的鲁棒性。
当所述待修正多边形的原始外边界和待修正多边形的原始孔洞均不满足简单多边形条件时,那么在步骤S101中,是基于原始外边界和原始孔洞生成的简单多边形,此时上述步骤S103“基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第一简单多边形”可以通过以下步骤实现:
步骤S1031,基于所述至少两个简单多边形之间的包含关系获取所述各个简单多边形的被包含次数。
各个简单多边形的被包含次数可以为0,也可以为1、2、3等等,其中,当简单多边形的被包含次数为0时,说明该简单多边形不被任意简单多边形包含。
步骤S1032,将被包含次数为偶数的简单多边形确定为第一简单多边形。
当简单多边形的被包含次数为偶数时,说明简单多边形并不是内部孔洞,而是被包含在多边形内部的其他外边界。
对应地,当待修正多边形的原始外边界和待修正多边形的原始孔洞均不满足简单多边形条件时,上述步骤S104“基于所述待修正多边形的原始孔洞和第二简单多边形中的至少一种确定各个第一简单多边形对应的内部孔洞”,可以通过以下步骤实现:
步骤S1041B,基于所述至少两个简单多边形之间的包含关系,确定第一简单多边形包含的第二简单多边形。
需要说明的是,步骤S1041B与上述步骤S1041A的实现过程是类似的。
步骤S1042B,将所述第一简单多边形包含的第二简单多边形确定为所述第一简单多边形对应的候选孔洞。
在该步骤中,确定出了第一简单多边形包含的第二简单多边形(也即候选孔洞),但是并不能将候选孔洞确定为第一简单多边形真实的孔洞,而有可能为一个新的带孔多边形的外边界。
步骤S1043B,将不被除自身以外的其他任意一个候选孔洞包含的候选孔洞确定为所述第一简单多边形对应的内部孔洞。
如果一候选孔洞不被除自身以外的其他任意一个候选孔洞包含,那么也就是说该候选孔洞只被第一简单多边形包含,那么该候选孔洞为该第一简单多边形的真实孔洞。如果一候选孔洞被除自身以外的其他候选孔洞包含,那么如果该候选孔洞仅被一个其他候选孔洞包含,那么该候选孔洞为一个外边界,如果该候选孔洞被两个其他候选孔洞包含,那么它为直接包含它的其他候选孔洞的真实孔洞。
在上述步骤S1041B至步骤S1043B所在的实施例中,对于待修正多边形的原始外边界不为相对简单多边形,确定新外边界真实包含的孔洞时,首先将新外边界包含的第二简单多边形和原始孔洞确定为候选孔洞,然后再获取候选孔洞之间的包含关系,将不被除自身之外的其他任意一个候选孔洞包含的候选孔洞确定为该第一简单多边形真实对应的内部孔洞,从而能够避免将其他外边界确定为内部孔洞,保证修正后的多边形的正确性。
本申请实施例提供一种多边形生成方法,应用于利用多个线段生成简单多边形的场景,图6为本申请实施例提供的多边形生成方法的一种实现流程示意图,如图6所示:
步骤S301,获取待处理的多个线段,对所述多个线段进行分割处理,得到多个目标线段。
其中,不同目标线段之间最多在端点相交,也即两个目标线段或者在端点相交,或者不相交。
该步骤在实现时,可以将多个线段进行两两求交,并从交点处将线段进行切割,从而得到只在端点处相交的多个目标线段。在一些实施例中,该多个目标线段构成线段数组A。
以图10中的1001为例进行说明,此时待处理的多个线段为AB、DE、AE和BD这四条线段。然后将线段两两相交,也即AB和BD相交,此时交点为B,且满足在端点相交;再将DE和AE相交,此时交点为E,也满足在端点相交;再将AE和BD相交,此时交点为C,那么将AE和BD从C点分割,得到线段AC、CE、BC和CD。再将AB和DE相交,不存在交点,此时不处理。对于图10中的1001来说,经过步骤S301,由原来的四条线段AB、DE、AE和BD分割为AB、DE、AC、CE、BC和CD这六条线段。
步骤S302,基于所述多个目标线段,建立目标线段的端点与目标线段之间的映射集合。
该映射集合中包括多个目标线段的端点与目标线段的映射关系。依然以图10中1001为例进行说明。1001中包括五个端点,分别为A、B、C、D、E,那么对应有五个映射关系,分别为A→AC、AB,B→BC、AB,C→AC、BC、CE、CD,D→CD、DE,E→DE、CE。
步骤S303,基于所述映射集合,确定能够构成环形的目标端点,并基于所述能够构成环形的目标端点生成简单多边形。
在步骤S302中通过映射集合建立线段之间的连接关系,从而在该步骤中能够根据这个连接关系来确定出能够成环的端点,然后将这些端点构成简单多边形,对于无法成环的折线段(对应于布置中的悬边),这些折线段对于生成简单多边形无用,因此将这些折线段舍弃。
步骤S304,当生成的简单多边形为至少两个时,确定至少两个简单多边形之间的包含关系。
步骤S305,基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第三简单多边形。
在本申请实施例中,将第三简单多边形作为带孔多边形的外边界。
步骤S306,基于第四简单多边形确定各个第三简单多边形对应的内部孔洞。
所述第四简单多边形为所述至少两个简单多边形中除所述第三简单多边形之外的其他多边形。
步骤S307,基于所述各个第三简单多边形和所述各个第三简单多边形各自对应的内部孔洞生成各个带孔多边形。
需要说明的是,上述步骤S304至步骤S307的实现过程与步骤S102至步骤S105的实现过程是类似的,在实际应用中,可以参考步骤S102至步骤S105的实现过程。
在本申请实施例提供的多边形生成方法中,当输入为无序的多个线段时,首先对所述多个线段进行分割处理,得到多个目标线段,基于所述多个目标线段,建立目标线段的端点与目标线段之间的映射集合,通过该映射集合建立线段之间的连接关系,因此能够基于所述映射集合,确定出能够构成环形的目标端点,并基于所述能够构成环形的目标端点生成简单多边形,如果生成的简单多边形为至少两个时,需要确定至少两个简单多边形的包含关系,并基于所述至少两个简单多边形之间的包含关系从所述至少两个简单多边形中确定出作为新外边界的至少一个第三简单多边形;然后再基于第四简单多边形确定各个第三简单多边形对应的真正的内部孔洞,最后基于所述各个第三简单多边形和所述各个第三简单多边形各自对应的内部孔洞生成各个简单多边形,如此能够将无序线段构成的多边形生成简单多边形,从而保证利用简单多边形执行几何算法时能够正确执行。
在一些实施例中,所述映射集合包括多个端点和目标线段之间的映射关系,对应地,上述步骤S303“基于所述映射集合,确定能够构成环形的目标端点”,可以通过以下步骤实现:
步骤S30301,从所述映射集合中获取第j个端点,将所述第j个端点确定为当前处理端点。
其中,j=1,2,…,J,J为端点总数。继续以图10的1001为例进行说明,假设第1个端点为A,此时将A确定为当前处理端点。
步骤S30302,将所述当前处理端点压入预先创建的端点栈中。
步骤S30303,确定映射集合中是否存在当前处理端点对应的目标线段。
映射集合为{A→AC、AB,B→BC、AB,C→AC、BC、CE、CD,D→CD、DE,E→DE、CE},此时映射集合中存在A对应的目标线段。
步骤S30304,确定是否仅存在一个当前处理端点对应的目标线段。
其中,当仅存在一个当前处理端点对应的目标线段时,进入步骤S30305;当存在至少两个当前处理端点对应的目标线段时,进入步骤S30314。
承接上述举例,因为A对应目标线段AC和AB,也即当前处理端点对应两个目标线段,此时进入步骤S30314。
步骤S30305,将所述目标线段从所述映射集合中删除,将所述目标线段的另一端点压入所述端点栈。
在该步骤中,是将映射集合中将该目标线段删除,如果目标线段存在于多个端点对应的映射关系中,则从多个映射关系中均删除该目标线段。
步骤S30306,确定端点栈中是否存在与栈顶端点相同的端点。
其中,当所述端点栈中存在与栈顶端点相同的端点时,说明此时端点栈中存在能够成环的端点,进入步骤S30307;当端点栈中不存在与栈顶端点相同的端点时,说明此时端点栈中不存在能够成环的端点,进入步骤S30308。
步骤S30307,将所述端点之上的各个端点进行出栈处理,并将所述各个端点确定为能够构成环形的目标端点。
步骤S30308,确定是否已对映射集合中各个端点均进行入栈处理。
其中,如果确定未对映射集合中各个端点均进行入栈处理,进入步骤S30309;如果确定已对映射集合中各个端点均进行入栈处理,进入步骤S30310。
步骤S30309,将所述当前处理起点的下一个端点更新为当前处理端点,并转入步骤S30302。
步骤S30310,确定端点栈是否为空。
其中,如果端点栈为空,结束流程,如果所述端点栈不为空,进入步骤S30311。
步骤S30311,确定端点栈中的当前端点是否能构成环形。
如果所述端点栈中的当前端点能构成环形,进入步骤S30312;如果端点栈中的当前端点不能构成环形,进入步骤S30313。
步骤S30312,将所述当前端点确定为目标端点。
步骤S30313,从端点栈中删除所有当前端点,并结束流程。
步骤S30314,对当前的映射集合和当前的端点栈进行备份处理,得到备份后的映射集合和备份后的端点栈。
步骤S30315,从所述当前处理端点对应的至少两个目标线段中确定待删除目标线段。
该步骤中,可以是从当前处理端点对应的至少两个目标线段中随机确定一个作为待删除目标线段。承接上述举例,当前处理端点A对应目标线段AC和AB,此时选择AC为待删除目标线段。
步骤S30316,基于所述当前的映射集合和所述待删除目标线段,确定能够构成环形的目标端点。
该步骤在实现时,可以参考步骤S30305至步骤S30313的实现过程。首先,将AC从映射集合中删除,此时映射集合为{A→AB,B→BC、AB,C→BC、CE、CD,D→CD、DE,E→DE、CE},将C入栈,此时端点栈内包括端点A和端点C,判断A和C不能成环,此时确定未对映射集合中各个端点均进行入栈处理,那么将映射集合中的下一个端点入栈,也即将B入栈,由于B对应有两个目标线段,假设本次将AB确定为待删除目标线段,此时将AB的另一个端点A入栈,由于此时端点栈中已经存在端点A,那么将已经存在的端点A之上的端点确定为能够成环的目标端点,也即端点A、B、C为目标端点,此时将目标端点构成简单多边形。此时端点栈中仅存在端点A,映射集合为{A→AB,B→BC,C→BC、CE、CD,D→CD、DE,E→DE、CE},然后再继续入栈D,假设端点D对应的待删除目标线段为DE,那么将DE从映射集合中删除,并将E入栈,此时映射集合为{A→BC,B→BC,C→BC、CE、CD,D→CD,E→CE},此时E对应的目标线段为CE,那么将CE从映射集合中删除,并将C入栈,此时映射集合为{A→AB,B→BC,C→BC、CD,D→CD,E→空},端点栈从栈底到栈顶依次是A、D、E、C,本次需要将D入栈,那么端点栈从栈底到栈顶依次是A、D、E、C、D,此时将元素D之上的端点确定为目标端点,也即E、C、D,并将E、C、D构成简单多边形。
步骤S30317,再次从所述当前处理端点对应的至少两个目标线段中确定新的待删除目标线段,基于所述备份后的映射集合、所述备份后的端点栈和所述新的待删除目标线段,确定能够构成环形的目标端点,直至将所述当前处理端点对应的至少两个目标线段全部删除。
该步骤在实现时,参考步骤S30305至步骤S30313的实现过程,得到选择新的待删除目标线段时生成的简单多边形。
通过上述步骤S30301至步骤S30317,能够在一个端点对应多条目标线段时,将各个目标线段分别作为待删除目标线段,并分别进行成环判断,得到所有符合条件的成环结果,也即得到各种符合简单多边形条件的多边形,能够保证数据的全面性,进而使得用户可以根据具体应用需求来选择最适合的简单多边形。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。
针对相关技术中利用预设几何算法生成的多边形不满足简单多边形条件而造成某些算法无法正确执行的问题,在本申请实施例中,首先给出针对外边界为“相对简单”多边形的情况的基本修正算法,然后针对多边形不满足“相对简单”的情况,以及输入为无序线段的情况,对基本修正算法进行扩展,以便满足更广泛的使用场景。
本申请实施例提供一种多边形修正方法,该多边形修正方法是针对外边界为“相对简单”多边形的情况。
在大多数情况下,已有几何算法生成的带孔多边形的外边界是“相对简单”的多边形。这也符合CGAL中对合格带孔多边形的定义。针对这种常见场景,本申请实施例提供一种多边形修正方法,该方法包括以下两个步骤:1)简单多边形生成;2)包含关系生成。下面对以下两个步骤进行说明。
一、简单多边形生成。
简单多边形的生成原理是:定义一个“后进先出”的栈结构,然后依次压入输入多边形中的顶点。每压入一个顶点,就判断一下当前栈中的元素是否可以成环,如果是,则及时移出已经成环的部分,并生成一个简单多边形。这样循环直到所有顶点都处理完成并且栈为空。在实现时,可以通过以下步骤实现:
步骤S701,判断输入的多边形是否为简单多边形。
其中,如果输入的多边形为简单多边形,结束流程,如果输入的多边形不为简单多边形,进入步骤S702。
步骤S702,定义结果多边形数组V。
步骤S703,定义一个临时存储多边形顶点的栈S。
步骤S704,对于输入多边形的每条线段的起点,执行步骤S705至S707:
步骤S705,将当前顶点压入栈顶;
步骤S706,检查栈顶元素是否还存在于栈中的其它位置,如果是,依次弹出该位置上面的所有元素,否则转步骤S707。
步骤S707,将步骤S706弹出的所有元素顺次相连,构成一个简单多边形P,并放入V中,返回步骤S708。
步骤S708,如果栈S不为空,则将当前栈中的所有元素依次弹出并顺次相连,构成一个简单多边形P,并放入V中;
步骤S709,对于V中的所有简单多边形,如果其顶点呈顺时针方向排列,则执行反向操作,使其顶点呈逆时针方向排列;
步骤S710,返回多边形数组V。
以下以图7左侧的原始带孔多边形711的外边界为例来展示简单多边形的生成算法:从编号为1的线段的起点开始向栈中压入顶点;当压到8号线段的起点时,发现它已经存在于栈中了(即4号线段的起点)。此时依次弹出5、6、7、8号线段的起点,形成一个简单多边形,设其为P1;接着继续将其余顶点压入栈中。当压入10号线段的起点后,压栈过程结束。此时发现栈中尚存1、2、3、4、9、10号线段的起点,则将它们依次抛出,并形成另外一个简单多边形P2。最终输出结果即为P1和P2。
二、包含关系生成。
采用简单多边形生成算法有可能生成多个不存在包含关系的简单多边形,如图8右侧的多边形812所示。如果原来的带孔多边形还包含内部孔洞,那么还需要建立新的多边形外边界和原有孔洞之间的包含关系。例如对于原来的正方形孔洞(也即图8的812中的白色小正方形),需要判断它究竟位于多边形8121的外边界内,还是位于多边形8122的边界内。给定一个孔洞和一个外边界,判断两者是否具有包含关系可以通过以下步骤实现:
步骤S721,对于孔洞上的每个顶点,执行步骤S722至步骤S724;
步骤S722,确定该顶点位于外边界的内部,则返回true;
步骤S723,确定该顶点位于外边界的外部,则返回false;
步骤S724,如果该顶点既不位于外边界的内部,也不位于外边界的外部,则返回步骤S721;
步骤S725,如果孔洞的顶点均与外边界重合,返回错误标识。
由于孔洞和外边界已经保证不会相交,除非交点在它们共同的顶点处,所以一旦确定孔洞顶点位于外边界的内部或者外部,就可以提前结束算法并返回结果;但是如果孔洞顶点刚好就是交点,那么还无法得到明确结论,需要通过其余顶点来判断包含关系。只有当孔洞和外边界完全重合时,算法才会执行到步骤S726,此时返回错误标识供用户参考(该情况一般不会出现)。
在得到内部孔洞和新的外边界包含关系之后,只需要将孔洞置于对应的外边界内部即可。
通过本申请实施例提供的多边形修正方法,能够对于诸如图7所示的带孔多边形,在不改变其所表达的有效区域的前提下,仅仅通过修改带孔多边形的拓扑连接关系,就可以生成如图8所示的新的表示方式。例如对于图7左侧711所示的外边界,可以将编号为4至7的线段独立抽取出来,形成一个新的简单多边形,并用剩余线段再形成一个简单多边形;由于前一个简单多边形位于后一个简单多边形的内部,并且两者仅仅在顶点处相交,所以将前一个多边形作为修正后的带孔多边形的一个新的内部孔洞,而将后一个多边形作为修正后的带孔多边形的外边界。对于图7右侧所示的带孔多边形712,可以采用同样的分解方法将原始“相对简单”的外边界分解为两个简单多边形。由于这两个多边形不存在相互包含的关系,所以它们可以分别作为新的带孔多边形的外边界。如果旧的带孔多边形内部还有孔洞,那么只需要将旧孔洞添加到包含它的外边界内部即可;如图8右侧812所示,此时原有的带孔多边形被修正为两个独立的带孔多边形,分别为多边形8121和多边形8122。可以验证,修正后的带孔多边形所表达的有效区域完全没有改变,但是每个带孔多边形的外边界和内部孔洞都是严格“简单”的,因此可以作为所有几何算法的输入。
在实践中发现,利用某些计算几何算法实现所得到的带孔多边形,其外边界和内部孔洞甚至也不满足“相对简单”的情况,如图1A中多边形112以及图9左侧901的内部孔洞(也即901中由编号1至10的线段构成的多边形)所示。在这种情况下,甚至无法定义多边形的朝向,因此几乎无法作为任何算法的输入。但是经过分析,发现只需要对上述算法进行少许扩展,就可以完成对这类带孔多边形的修正。
在实现时,可以通过以下步骤实现:
1)采用上述简单多边形生成算法,对带孔多边形的外边界和内部孔洞分别进行修正,生成简单多边形数组A;
2)采用上述包含关系生成算法,对于A中的每个简单多边形,计算它所包含的所有多边形;
3)利用步骤2的计算结果,得到A中的每个简单多边形被其它多边形包含的个数:如果个数为偶,则将它放入外边界多边形数组A1中;
4)对于外边界数组A1中的每个外边界,执行步骤5-6;
5)设当前外边界为outer_boundary,其内部孔洞列表为hole_list;
6)对于hole_list中的每个多边形孔洞,判断它是否是outer_boundary真正的内部孔洞,如果是,则将其置入outer_boundary内部;
7)返回带孔多边形数组A1。
与上述基本修正算法相比,在针对非简单多边形的修正算法中最大的扩展在于步骤6中判断一个孔洞是否为outer_boundary真正的内部孔洞。例如对于图9左侧901所示的内部孔洞,在进行简单多边形分解之后,将会形成右侧902所示的两个相互嵌套的多边形。显而易见,内部的小正方形既被包含在最外部多边形的内部,也被包含在次外层多边形的内部。然而,它却并不属于最外层多边形的内部孔洞,而应该成为一个新的带孔多边形的外边界。
为了判断一个孔洞是否是外边界的真正内部孔洞,在本申请实施例采取如下算法:
1)对于当前外边界,得到它所包含的所有多边形的列表;
2)对于多边形列表中的每个多边形(待判断的孔洞除外),判断它是否包含当前孔洞,如果是则返回否;
3)返回是。
由于只有那些不被外边界内的其它多边形所包含的多边形,才是当前外边界的真正孔洞。基于该策略,右侧902内部的小正方形将被排除在外;同时由于该小正方形被其它多边形包含的个数为2,所以此前已被放入数组A1中,会被作为独立的带孔多边形输出。这样,左侧图形的修正结果就是两个独立的带孔多边形(其中一个带孔多边形不包含孔洞)。可以发现每个带孔多边形都为简单多边形。
在某些情况下,算法的输入甚至不是多边形。例如对于3D打印的切片程序而言,在采用平面和三维模型求交之后,得到的仅仅是一组无序线段。此时,需要首先设计鲁棒的成环算法,得到一系列简单多边形,然后就可以采用针对相对简单多边形的修正算法,得到满足简单多边形条件的带孔多边形数组。
针对输入为无需线段的场景,本申请实施例提供一种多边形生成方法,以下对该多边形生成方法的实现过程进行说明。
步骤S911,对于所有无序线段进行两两求交,并从交点处将所有无序线段进行切割,得到只在端点处相交的线段数组,记为A。
步骤S912,对于A中的每条线段,建立从它的两个端点到该线段的映射,并记整个映射集合为M。
步骤S913,定义输出简单多边形数组为B。
步骤S914,如果M不为空,执行步骤S915至步骤S910,否则转步骤S921;
步骤S915,定义一个堆栈S。
步骤S916,取出M的头部元素的键值,并压入堆栈;
步骤S917,如果S的栈顶元素在M中依然有线段与之关联,则从M中取出该线段,并将该线段的另一端点压入堆栈S,并转步骤S918,否则转步骤S919;
步骤S918,如果S中还存在与栈顶元素相同的元素,则将该元素之上的所有元素顺次抛出,形成简单多边形,并置入数组B中,否则返回步骤S916;
步骤S919,检查栈中的元素是否可以成环,如果可以,则依次抛出,形成简单多边形,置入数组B中,否则清空整个堆栈S;
步骤S920,返回步骤S914;
步骤S921,返回简单多边形数组B。
在本申请实施例中,根据无序线段生成多边形时,首先对无序线段进行两两求交,并基于交点进行分割,从而保证所有线段都不在内部相交。例如对于图10所示的无序线段,通过两两求交和分割,就可以将无法成环的线段提前分割,使得后续能够顺利成环;再通过映射M来建立线段之间的连接关系,从而可以沿着这个连接关系来尝试成环,一旦成环就输出到数组B中;对于有可能存在无法成环的折线段(对应于布置中的悬边),这些折线段对于生成简单多边形无用,所以舍弃。
利用成环算法得到一系列简单多边形之后,可以采用针对非简单多边形的修正算法来生成合法的带孔多边形。
采用本申请实施例提供的针对相对简单多边形的修正方法和针对非相对简单多边形的修正方法,可以使得图7所示的外边界为“相对简单”的带孔多边形符合预期地转换为图8所示的带孔多边形;可以使得图9左侧所示的内部孔洞不符合“相对简单”情况的带孔多边形也被顺利转换为图9右侧所示的带孔多边形数组。对于图10所示的特殊情形,处理结果为:1101原始输入为四条线段,经过处理之后变为两个简单多边形,其外边界均由三角形构成;1002原始输入为五条线段,经过处理之后变为两个简单多边形,其外边界均由直角三角形构成;1003原始输入为8条线段(可以构成2个矩形),经过处理之后输出为一个带孔多边形,其外边界为一个“凸”字形,并包含一个正方形的内部孔洞。
本申请实施例提供的多边形生成方法,对于某些输入存在歧义的输出情况。例如对于图10中1003所示的输入,采用两两求交之后,可以形成图11中1101所示的线段集。在建立顶点和线段之间的映射关系之后,从A点开始成环,在压栈到D点时,面临两种不同的选择:一种是压栈E点,然后继续沿着DE的方向进行成环;另一种是压栈J点,然后继续沿着DJ的方向成环。在压栈到G点时,同样面临着朝GH或者GD不同的成环选择。不同的选择将会生成不同的输出结果。假如沿着DE、GH的方向成环,或者沿着DJ、GD的方向成环,最终的输出结果如图11中1102所示;假如沿着DE、GD的方向成环,或者沿着DJ、GH的方向成环,那么最终的输出结果如图11中1103所示。可以验证,两种输出结果都是合法的。但是在不同的应用需求下,用户可能更倾向于某一种结果。
经过分析,这种情况往往会出现在映射集合中某个点对应的线段大于两条的情况。例如图11中1101的G和D点。如果当前栈顶元素为D,并且次栈顶元素为C,那么实际上面临沿着CD是左转还是右转的选择(注意不能选择DG);对于G点也面临类似情况。为此,在本申请实施例提供的多边形生成方法中,每当遇栈顶元素在映射集合中对应的线段大于两条时,采用回溯法来生成不同的解决方案。对于成环算法的第7步,如果和栈顶元素关联的线段的个数大于2,则得到它左转的线段_1和右转的线段_2。首先备份S和M的数据,然后尝试压入右转线段_1的顶点,并往后追溯生成最终结果result_1,接着还原S和M的备份,尝试压入左转线段_2的顶点,并往后追溯生成最终结果result_2。依次类推。假如映射集合M中度数大于2的顶点有n个,那么生成的最终结果会有2n个。这2n个结果中可能存在重合,只需要在最终结果中去重即可。
经过这样的扩展处理,用户将会拿到所有符合条件的成环结果,如图11中的1102和1103所示。用户可以根据具体应用需求来选择最适合的成环结果,然后再采用针对外边界不满足相对简单多边形的多边形修正方法来生成带孔多边形或者多边形集。
对于自动2UV展开项目中的Nest工具,在计算多边形的外部偏置之后,采用本申请实施例提供的修正算法进行修正,然后用修正结果来计算和剩余纹理空间的闵可夫斯基和,可以使得计算闵可夫斯基和的成功率从92%提高到100%。在自动2UV展开项目中的Reposition工具中,在采用布尔运算得到已有UV岛相对于整个纹理空间的补集之后,采用本申请实施例提供的多边形修正算法对补集进行修正,然后用修正结果来计算维诺图,可以使得维诺图的计算正确率从89%提高到了100%。以上测试数据均来自于某游戏的14个项目的美术资源,共计3340个模型文件。
在三维模型多视角可见区域提取工具中,对于每个原始三角面片,在得到不同视角下的可见区域的并集之后,对于每个带孔多边形采用本申请实施例所提供的多边形修正方法进行修正,然后将修正后的结果作为受限德劳内三角化方法的输入,可以使得受限德劳内三角化方法的成功率从96%提到到100%。该测试数据来自某款游戏的角色美术资源集,共计541个模型文件。
可以理解的是,在本申请实施例中,涉及到用户信息的内容,例如,待修正多边形等相关的数据,当本申请实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
下面继续说明本申请实施例提供的多边形修正装置443的实施为软件模块的示例性结构,在一些实施例中,如图3所示,存储在存储器440的多边形修正装置443中的软件模块可以包括:
第一生成模块4431,用于获取待修正多边形,基于所述待修正多边形生成至少两个简单多边形;
第一确定模块4432,用于确定所述至少两个简单多边形之间的包含关系;
第二确定模块4433,用于基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第一简单多边形,将所述第一简单多边形作为修正后的多边形的新外边界;
第三确定模块4434,用于基于所述待修正多边形的原始孔洞和第二简单多边形中的至少一种确定各个第一简单多边形对应的内部孔洞,所述第二简单多边形为所述至少两个简单多边形中除所述第一简单多边形之外的其他多边形;
第二生成模块4435,用于基于所述各个第一简单多边形和所述各个第一简单多边形各自对应的内部孔洞生成各个修正后的多边形。
在一些实施例中,该第一生成模块4431还用于:
当所述待修正多边形的原始外边界满足相对简单多边形条件且原始孔洞满足简单多边形条件时,基于所述待修正多边形的原始外边界生成至少两个简单多边形;
当所述待修正多边形的原始外边界和原始孔洞均不满足简单多边形条件时,基于所述原始外边界和所述原始孔洞生成至少两个简单多边形。
在一些实施例中,该第一生成模块4431还用于:
获取所述待修正多边形的原始外边界上各条边的起点;
将第i个起点确定为当前处理起点,并将所述当前处理起点压入预先创建的起点栈中,其中,i=1,2,…,N,N为原始外边界上的起点总数;
当所述当前处理起点还存在于除栈顶之外的其他位置,对所述其他位置之前的其他起点与所述当前处理起点进行出栈处理;
将所述其他起点与所述当前处理起点构成简单多边形,将所述当前处理起点的下一个起点更新为当前处理起点,并将所述当前处理起点压入所述起点栈中;
当对所有起点均进行入栈处理后,所述起点栈不为空,将所述起点栈中的各个起点构成简单多边形。
在一些实施例中,该第一生成模块4431还用于:
当所述当前处理起点不存在于除栈顶之外的其他位置,所述当前处理起点的下一个起点更新为当前处理起点;
将所述当前处理起点压入所述起点栈中。
在一些实施例中,该第一生成模块4431还用于:
将所述当前处理起点和所述其他起点按照出栈顺序依次相连,得到初始多边形;
确定所述初始多边形的顶点排列方向;
当所述顶点排列方向为顺时针时,对所述初始多边形进行反向处理,得到简单多边形,所述简单多边形的顶点排列方向为逆时针。
在一些实施例中,该第一确定模块4432还用于:
从所述至少两个简单多边形中获取第p个简单多边形和第q个简单多边形,其中,p=1,2,…,M,q=1,2,…,M,且p不等于q;
获取所述第p个简单多边形的第s个顶点,s=1,2,…。S,S为第p个简单多边形的顶点总数;
当确定所述第s个顶点位于所述第q个简单多边形内部时,确定所述第q个简单多边形包含所述第p个简单多边形;
当确定所述第s个顶点位于所述第q个简单多边形外部时,确定所述第q个简单多边形不包含所述第p个简单多边形;
当确定所述第s个顶点不位于所述第q个简单多边形内部,且不位于所述第q个简单多边形外部时,获取第s+1个顶点,并基于所述第s+1个顶点和所述第q个简单多边形确定所述第p个简单多边形和所述第q个简单多边形的包含关系。
在一些实施例中,该第二确定模块4433还用于:
当所述待修正多边形的原始外边界满足相对简单多边形条件且原始孔洞满足简单多边形条件时,基于所述至少两个简单多边形之间的包含关系,将所述至少两个简单多边形中不被任意一个简单多边形包含的简单多边形确定为第一简单多边形。
在一些实施例中,该第三确定模块4434还用于:
基于所述至少两个简单多边形之间的包含关系,确定第一简单多边形包含的第二简单多边形;
将存在处于所述第一简单多边形内部顶点的原始孔洞确定为所述第一简单多边形包含的原始孔洞;
将所述第一简单多边形包含的第二简单多边形和所述第一简单多边形包含的原始孔洞确定为所述第一简单多边形对应的内部孔洞。
在一些实施例中,该第二确定模块4433还用于:
当所述待修正多边形的原始外边界和原始孔洞均不满足简单多边形条件时,基于所述至少两个简单多边形之间的包含关系获取所述各个简单多边形的被包含次数;
当将被包含次数为偶数的简单多边形确定为第一简单多边形。
在一些实施例中,该第三确定模块4434还用于:
基于所述至少两个简单多边形之间的包含关系,确定第一简单多边形包含的第二简单多边形;
将所述第一简单多边形包含的第二简单多边形确定为所述第一简单多边形对应的候选孔洞;
将不被除自身以外的其他任意一个候选孔洞包含的候选孔洞确定为所述第一简单多边形对应的内部孔洞。
需要说明的是,本申请实施例针对多边形修正装置的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
在一些实施例中,服务器的存储器440中还可以包括多边形生成装置,该多边形生成装置包括:
线段分割模块,用于获取待处理的多个线段,对所述多个线段进行分割处理,得到多个目标线段,其中,不同目标线段之间最多在端点相交;
映射建立模块,用于基于所述多个目标线段,建立目标线段的端点与目标线段之间的映射集合;
第三生成模块,用于基于所述映射集合,确定能够构成环形的目标端点,并基于所述能够构成环形的目标端点生成简单多边形;
第四确定模块,用于当生成的简单多边形为至少两个时,确定至少两个简单多边形之间的包含关系;
第五确定模块,用于基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第三简单多边形,将所述第三简单多边形作为带孔多边形的外边界;
第六确定模块,用于基于第四简单多边形确定各个第三简单多边形对应的内部孔洞,所述第四简单多边形为所述至少两个简单多边形中除所述第三简单多边形之外的其它多边形;
第四生成模块,用于基于所述各个第三简单多边形和所述各个第三简单多边形各自对应的内部孔洞生成各个带孔多边形。
在一些实施例中,所述映射集合包括多个端点和目标线段之间的映射关系,对应地,该第三生成模块,还用于:
从所述映射集合中获取第j个端点,将所述第j个端点确定为当前处理端点,并将所述当前处理端点压入预先创建的端点栈中,其中,j=1,2,…,J,J为端点总数;
当所述映射集合中存在一个与所述当前处理端点对应的目标线段,将所述目标线段从所述映射集合中删除,将所述目标线段的另一端点压入所述端点栈;
当所述端点栈中存在与栈顶端点相同的端点,将所述端点之上的各个端点进行出栈处理,并将所述各个端点确定为能够构成环形的目标端点;
将所述当前处理起点的下一个端点更新为当前处理端点,并将所述当前处理端点压入所述端点栈中;
当对所述映射集合中的各个端点均进行入栈处理后,所述端点栈不为空,如果所述端点栈中的当前端点能构成环形,将所述当前端点确定为目标端点。
在一些实施例中,该第三生成模块,还用于:
当所述映射集合中存在至少两个与所述当前处理端点对应的目标线段时,对当前的映射集合和当前的端点栈进行备份处理,得到备份后的映射集合和备份后的端点栈;
从所述当前处理端点对应的至少两个目标线段中确定待删除目标线段;
基于所述当前的映射集合和所述待删除目标线段,确定能够构成环形的目标端点;
再次从所述当前处理端点对应的至少两个目标线段中确定新的待删除目标线段,基于所述备份后的映射集合、所述备份后的端点栈和所述新的待删除目标线段,确定能够构成环形的目标端点,直至将所述当前处理端点对应的至少两个目标线段全部删除。
需要说明的是,本申请实施例针对多边形生成装置的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例上述的多边形修正方法和多边形生成方法。
本申请实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的多边形修正及生成方法,例如,如图4示出的多边形修正方法、图6示出的多边形生成方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。
Claims (18)
1.一种多边形修正方法,其特征在于,所述方法包括:
获取待修正多边形,基于所述待修正多边形生成至少两个简单多边形;
确定所述至少两个简单多边形之间的包含关系;
基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第一简单多边形,将所述第一简单多边形作为修正后的多边形的新外边界;
基于所述待修正多边形的原始孔洞和第二简单多边形中的至少一种确定各个第一简单多边形对应的内部孔洞,所述第二简单多边形为所述至少两个简单多边形中除所述第一简单多边形之外的其他多边形;
基于所述各个第一简单多边形和所述各个第一简单多边形各自对应的内部孔洞生成各个修正后的多边形。
2.根据权利要求1中所述的方法,其特征在于,所述基于所述待修正多边形生成至少两个简单多边形,包括:
当所述待修正多边形的原始外边界满足相对简单多边形条件,且所述待修正多边形的原始孔洞满足简单多边形条件时,基于所述待修正多边形的原始外边界生成至少两个简单多边形;
当所述待修正多边形的原始外边界和所述待修正多边形的原始孔洞均不满足简单多边形条件时,基于所述原始外边界和所述原始孔洞生成至少两个简单多边形。
3.根据权利要求2中所述的方法,其特征在于,所述基于所述待修正多边形的原始外边界生成至少两个简单多边形,包括:
获取所述待修正多边形的原始外边界上各条边的起点;
将第i个起点确定为当前处理起点,并将所述当前处理起点压入预先创建的起点栈中,其中,i=1,2,…,N,N为原始外边界上的起点总数;
当所述当前处理起点还存在于除栈顶之外的其他位置,对所述其他位置之前的其他起点与所述当前处理起点进行出栈处理;
将所述其他起点与所述当前处理起点构成简单多边形,将所述当前处理起点的下一个起点更新为当前处理起点,并将所述当前处理起点压入所述起点栈中;
当对所有起点均进行入栈处理后,所述起点栈不为空,将所述起点栈中的各个起点构成简单多边形。
4.根据权利要求3中所述的方法,其特征在于,所述方法还包括:
当所述当前处理起点不存在于除栈顶之外的其他位置,所述当前处理起点的下一个起点更新为当前处理起点;
将所述当前处理起点压入所述起点栈中。
5.根据权利要求3中所述的方法,其特征在于,所述将所述其他起点与所述当前处理起点构成简单多边形,包括:
将所述当前处理起点和所述其他起点按照出栈顺序依次相连,得到初始多边形;
确定所述初始多边形的顶点排列方向;
当所述顶点排列方向为顺时针时,对所述初始多边形进行反向处理,得到简单多边形,所述简单多边形的顶点排列方向为逆时针。
6.根据权利要求1中所述的方法,其特征在于,所述确定所述至少两个简单多边形之间的包含关系,包括:
从所述至少两个简单多边形中获取第p个简单多边形和第q个简单多边形,其中,p=1,2,…,M,q=1,2,…,M,且p不等于q;
获取所述第p个简单多边形的第s个顶点,s=1,2,…,S,S为第p个简单多边形的顶点总数;
当确定所述第s个顶点位于所述第q个简单多边形内部时,确定所述第q个简单多边形包含所述第p个简单多边形;
当确定所述第s个顶点位于所述第q个简单多边形外部时,确定所述第q个简单多边形不包含所述第p个简单多边形;
当确定所述第s个顶点不位于所述第q个简单多边形内部,且不位于所述第q个简单多边形外部时,获取第s+1个顶点,并基于所述第s+1个顶点和所述第q个简单多边形确定所述第p个简单多边形和所述第q个简单多边形的包含关系。
7.根据权利要求1中所述的方法,其特征在于,所述基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第一简单多边形,包括:
当所述待修正多边形的原始外边界满足相对简单多边形条件且所述待修正多边形的原始孔洞满足简单多边形条件时,基于所述至少两个简单多边形之间的包含关系,将所述至少两个简单多边形中不被任意一个简单多边形包含的简单多边形确定第一简单多边形。
8.根据权利要求7中所述的方法,其特征在于,所述基于所述待修正多边形的原始孔洞和第二简单多边形中的至少一种确定各个第一简单多边形对应的内部孔洞,包括:
基于所述至少两个简单多边形之间的包含关系,确定第一简单多边形包含的第二简单多边形;
将存在处于所述第一简单多边形内部顶点的原始孔洞确定为所述第一简单多边形包含的原始孔洞;
将所述第一简单多边形包含的第二简单多边形和所述第一简单多边形包含的原始孔洞确定为所述第一简单多边形对应的内部孔洞。
9.根据权利要求1中所述的方法,其特征在于,所述基于所述至少两个简单多边形之间的包含关系从所述至少两个简单多边形中确定出至少一个第一简单多边形,包括:
当所述待修正多边形的原始外边界和原始孔洞均不满足简单多边形条件时,基于所述至少两个简单多边形之间的包含关系获取各个简单多边形的被包含次数;
当将被包含次数为偶数的简单多边形确定为第一简单多边形。
10.根据权利要求9中所述的方法,其特征在于,所述基于所述待修正多边形的原始孔洞和第二简单多边形中的至少一种确定各个第一简单多边形对应的内部孔洞,包括:
基于所述至少两个简单多边形之间的包含关系,确定第一简单多边形包含的第二简单多边形;
将所述第一简单多边形包含的第二简单多边形确定为所述第一简单多边形对应的候选孔洞;
将不被除自身以外的其他任意一个候选孔洞包含的候选孔洞确定为所述第一简单多边形对应的内部孔洞。
11.一种多边形生成方法,其特征在于,所述方法包括:
获取待处理的多个线段,对所述多个线段进行分割处理,得到多个目标线段,其中,不同目标线段之间最多在端点相交;
基于所述多个目标线段,建立目标线段的端点与目标线段之间的映射集合;
基于所述映射集合,确定能够构成环形的目标端点,并基于所述能够构成环形的目标端点生成简单多边形;
当生成的简单多边形为至少两个时,确定至少两个简单多边形之间的包含关系;
基于所述至少两个简单多边形之间的包含关系从所述至少两个简单多边形中确定出至少一个第三简单多边形,将所述第三简单多边形作为带孔多边形的外边界;
基于第四简单多边形确定各个第三简单多边形对应的内部孔洞,所述第四简单多边形为所述至少两个简单多边形中除所述第三简单多边形之外的其他多边形;
基于所述各个第三简单多边形和所述各个第三简单多边形各自对应的内部孔洞生成各个带孔多边形。
12.根据权利要求11中所述的方法,其特征在于,所述映射集合包括多个端点和目标线段之间的映射关系,对应地,所述基于所述映射集合,确定能够构成环形的目标端点,包括:
从所述映射集合中获取第j个端点,将所述第j个端点确定为当前处理端点,并将所述当前处理端点压入预先创建的端点栈中,其中,j=1,2,…,J,J为端点总数;
当所述映射集合中存在一个与所述当前处理端点对应的目标线段,将所述目标线段从所述映射集合中删除,将所述目标线段的另一端点压入所述端点栈;
当所述端点栈中存在与栈顶端点相同的端点,将所述端点之上的各个端点进行出栈处理,并将所述各个端点确定为能够构成环形的目标端点;
将所述当前处理端点的下一个端点更新为当前处理端点,并将所述当前处理端点压入所述端点栈中;
当对所述映射集合中的各个端点均进行入栈处理后,所述端点栈不为空,如果所述端点栈中的当前端点能构成环形,将所述当前端点确定为目标端点。
13.根据权利要求12中所述的方法,其特征在于,所述基于所述映射集合,确定能够构成环形的目标端点,包括:
当所述映射集合中存在至少两个与所述当前处理端点对应的目标线段时,对当前的映射集合和当前的端点栈进行备份处理,得到备份后的映射集合和备份后的端点栈;
从所述当前处理端点对应的至少两个目标线段中确定待删除目标线段;
基于所述当前的映射集合和所述待删除目标线段,确定能够构成环形的目标端点;
再次从所述当前处理端点对应的至少两个目标线段中确定新的待删除目标线段,基于所述备份后的映射集合、所述备份后的端点栈和所述新的待删除目标线段,确定能够构成环形的目标端点,直至将所述当前处理端点对应的至少两个目标线段全部删除。
14.一种多边形修正装置,其特征在于,所述装置包括:
第一生成模块,用于获取待修正多边形,基于所述待修正多边形生成至少两个简单多边形;
第一确定模块,用于确定所述至少两个简单多边形之间的包含关系;
第二确定模块,用于基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第一简单多边形,将所述第一简单多边形作为修正后的多边形的新外边界;
第三确定模块,用于基于所述待修正多边形的原始孔洞和第二简单多边形中的至少一种确定各个第一简单多边形对应的内部孔洞,所述第二简单多边形为所述至少两个简单多边形中除所述第一简单多边形之外的其他多边形;
第二生成模块,用于基于所述各个第一简单多边形和所述各个第一简单多边形各自对应的内部孔洞生成各个修正后的多边形。
15.一种多边形生成装置,其特征在于,所述装置包括:
线段分割模块,用于获取待处理的多个线段,对所述多个线段进行分割处理,得到多个目标线段,其中,不同目标线段之间最多在端点相交;
映射建立模块,用于基于所述多个目标线段,建立目标线段的端点与目标线段之间的映射集合;
第三生成模块,用于基于所述映射集合,确定能够构成环形的目标端点,并基于所述能够构成环形的目标端点生成简单多边形;
第四确定模块,用于当生成的简单多边形为至少两个时,确定至少两个简单多边形之间的包含关系;
第五确定模块,用于基于所述至少两个简单多边形之间的包含关系,从所述至少两个简单多边形中确定出至少一个第三简单多边形,将所述第三简单多边形作为带孔多边形的外边界;
第六确定模块,用于基于第四简单多边形确定各个第三简单多边形对应的内部孔洞,所述第四简单多边形为所述至少两个简单多边形中除所述第三简单多边形之外的其他多边形;
第四生成模块,用于基于所述各个第三简单多边形和所述各个第三简单多边形各自对应的内部孔洞生成各个带孔多边形。
16.一种计算机设备,其特征在于,所述计算机设备包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至10任一项所述的多边形修正方法或者权利要求11至13任一项所述的多边形生成方法。
17.一种计算机可读存储介质,存储有可执行指令,其特征在于,所述可执行指令被处理器执行时实现权利要求1至10任一项所述的多边形修正方法或者权利要求11至13任一项所述的多边形生成方法。
18.一种计算机程序产品,包括计算机程序或指令,其特征在于,所述计算机程序或指令被处理器执行时实现权利要求1至10任一项所述的多边形修正方法或者权利要求11至13任一项所述的多边形生成方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211088780.0A CN115187589B (zh) | 2022-09-07 | 2022-09-07 | 多边形修正及生成方法、装置、设备及可读存储介质 |
PCT/CN2023/114720 WO2024051498A1 (zh) | 2022-09-07 | 2023-08-24 | 多边形修正及生成方法、装置、电子设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211088780.0A CN115187589B (zh) | 2022-09-07 | 2022-09-07 | 多边形修正及生成方法、装置、设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115187589A true CN115187589A (zh) | 2022-10-14 |
CN115187589B CN115187589B (zh) | 2022-12-09 |
Family
ID=83522989
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211088780.0A Active CN115187589B (zh) | 2022-09-07 | 2022-09-07 | 多边形修正及生成方法、装置、设备及可读存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115187589B (zh) |
WO (1) | WO2024051498A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116523941A (zh) * | 2022-08-10 | 2023-08-01 | 苏州浩辰软件股份有限公司 | 含孔洞多边形的简化方法、装置及计算机程序产品 |
WO2024051498A1 (zh) * | 2022-09-07 | 2024-03-14 | 腾讯科技(深圳)有限公司 | 多边形修正及生成方法、装置、电子设备及计算机可读存储介质 |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1011591A (ja) * | 1996-06-27 | 1998-01-16 | Daikin Ind Ltd | 有穴ポリゴンの幾何学的分割方法 |
US20090284528A1 (en) * | 2008-05-15 | 2009-11-19 | Tyson Wayne Jensen | Software processing apparatus and method for creating three-dimensional topologically complete surface boundary representations from arbitrary polygon models |
CN106683167A (zh) * | 2016-07-19 | 2017-05-17 | 谢鸿宇 | 复杂建筑物高精度模型自动建模方法 |
CN107025685A (zh) * | 2017-04-11 | 2017-08-08 | 南京林业大学 | 拓扑感知下的机载建筑屋顶点云建模方法 |
CN108830897A (zh) * | 2018-06-11 | 2018-11-16 | 东南大学 | 一种道路中心线提取方法 |
CN110335191A (zh) * | 2019-07-10 | 2019-10-15 | 武汉光庭信息技术股份有限公司 | 一种带洞多边形在电子地图中的无损压缩存储方法和装置 |
CN112053622A (zh) * | 2020-09-16 | 2020-12-08 | 中国测绘科学研究院 | 一种多环多边形自相交模式识别及处理方法 |
CN112200886A (zh) * | 2020-09-30 | 2021-01-08 | 苏州源卓光电科技有限公司 | 一种矢量图形的填充方法 |
CN113781667A (zh) * | 2021-11-10 | 2021-12-10 | 深圳大学 | 三维结构简化重建方法、装置、计算机设备和存储介质 |
CN113806456A (zh) * | 2020-06-16 | 2021-12-17 | 华为技术有限公司 | 网格编码方法和装置 |
CN113920184A (zh) * | 2021-12-13 | 2022-01-11 | 腾讯科技(深圳)有限公司 | 多边形简化方法、装置、设备及计算机可读存储介质 |
WO2022057079A1 (zh) * | 2020-09-16 | 2022-03-24 | 成都完美天智游科技有限公司 | 虚拟场景的数据处理方法、装置、计算机程序及可读介质 |
CN114266800A (zh) * | 2021-12-24 | 2022-04-01 | 中设数字技术股份有限公司 | 一种图形的多矩形包围盒算法及生成系统 |
CN114742956A (zh) * | 2022-06-09 | 2022-07-12 | 腾讯科技(深圳)有限公司 | 模型处理方法、装置、设备及计算机可读存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6816170B1 (en) * | 2002-02-22 | 2004-11-09 | Zyvex Corporation | System and method for robust and efficient resizing of simple polygons |
CN103337084B (zh) * | 2013-06-05 | 2015-11-18 | 东南大学 | 一种基于人工地物特征的地物图斑自动生成方法 |
US9721363B2 (en) * | 2014-05-19 | 2017-08-01 | Google Inc. | Encoding polygon data for fast retrieval and rendering |
KR101646945B1 (ko) * | 2014-12-16 | 2016-08-10 | 삼성전자주식회사 | Gpu 기반 벡터 그래픽을 위한 메쉬 생성 장치, 방법 및 컴퓨터 프로그램 |
CN115187589B (zh) * | 2022-09-07 | 2022-12-09 | 腾讯科技(深圳)有限公司 | 多边形修正及生成方法、装置、设备及可读存储介质 |
-
2022
- 2022-09-07 CN CN202211088780.0A patent/CN115187589B/zh active Active
-
2023
- 2023-08-24 WO PCT/CN2023/114720 patent/WO2024051498A1/zh unknown
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1011591A (ja) * | 1996-06-27 | 1998-01-16 | Daikin Ind Ltd | 有穴ポリゴンの幾何学的分割方法 |
US20090284528A1 (en) * | 2008-05-15 | 2009-11-19 | Tyson Wayne Jensen | Software processing apparatus and method for creating three-dimensional topologically complete surface boundary representations from arbitrary polygon models |
CN106683167A (zh) * | 2016-07-19 | 2017-05-17 | 谢鸿宇 | 复杂建筑物高精度模型自动建模方法 |
US20180025541A1 (en) * | 2016-07-19 | 2018-01-25 | Hongyu Xie | Method for automatic modeling of complex buildings with high accuracy |
CN107025685A (zh) * | 2017-04-11 | 2017-08-08 | 南京林业大学 | 拓扑感知下的机载建筑屋顶点云建模方法 |
CN108830897A (zh) * | 2018-06-11 | 2018-11-16 | 东南大学 | 一种道路中心线提取方法 |
CN110335191A (zh) * | 2019-07-10 | 2019-10-15 | 武汉光庭信息技术股份有限公司 | 一种带洞多边形在电子地图中的无损压缩存储方法和装置 |
CN113806456A (zh) * | 2020-06-16 | 2021-12-17 | 华为技术有限公司 | 网格编码方法和装置 |
CN112053622A (zh) * | 2020-09-16 | 2020-12-08 | 中国测绘科学研究院 | 一种多环多边形自相交模式识别及处理方法 |
WO2022057079A1 (zh) * | 2020-09-16 | 2022-03-24 | 成都完美天智游科技有限公司 | 虚拟场景的数据处理方法、装置、计算机程序及可读介质 |
CN112200886A (zh) * | 2020-09-30 | 2021-01-08 | 苏州源卓光电科技有限公司 | 一种矢量图形的填充方法 |
CN113781667A (zh) * | 2021-11-10 | 2021-12-10 | 深圳大学 | 三维结构简化重建方法、装置、计算机设备和存储介质 |
CN113920184A (zh) * | 2021-12-13 | 2022-01-11 | 腾讯科技(深圳)有限公司 | 多边形简化方法、装置、设备及计算机可读存储介质 |
CN114266800A (zh) * | 2021-12-24 | 2022-04-01 | 中设数字技术股份有限公司 | 一种图形的多矩形包围盒算法及生成系统 |
CN114742956A (zh) * | 2022-06-09 | 2022-07-12 | 腾讯科技(深圳)有限公司 | 模型处理方法、装置、设备及计算机可读存储介质 |
Non-Patent Citations (1)
Title |
---|
杨承磊 等: "基于有向图的复杂带状图像边界多边形计算及其骨架化算法", 《第一届全国几何设计与计算学术会议论文集》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116523941A (zh) * | 2022-08-10 | 2023-08-01 | 苏州浩辰软件股份有限公司 | 含孔洞多边形的简化方法、装置及计算机程序产品 |
WO2024051498A1 (zh) * | 2022-09-07 | 2024-03-14 | 腾讯科技(深圳)有限公司 | 多边形修正及生成方法、装置、电子设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2024051498A1 (zh) | 2024-03-14 |
CN115187589B (zh) | 2022-12-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115187589B (zh) | 多边形修正及生成方法、装置、设备及可读存储介质 | |
US8665267B2 (en) | System and method for generating 3D surface patches from unconstrained 3D curves | |
JP3962361B2 (ja) | 位相判断装置、分解可能形状生成装置、構造メッシュ生成装置、位相判断方法、分解可能形状生成方法、および該位相判断方法を実行させるためのコンピュータ実行可能なプログラム、分解可能形状生成方法を実行させるためのコンピュータ実行可能なプログラム並びに構造メッシュ生成システム | |
EP1710720B1 (en) | Method of computer-aided design of a modeled object having several faces | |
US20110087350A1 (en) | Methods and system for enabling printing three-dimensional object models | |
JP4381743B2 (ja) | 境界表現データからボリュームデータを生成する方法及びそのプログラム | |
CN111462137A (zh) | 一种基于知识蒸馏和语义融合的点云场景分割方法 | |
US20150339432A1 (en) | Virtual cell model geometry compression | |
KR20140139984A (ko) | 3d 모델링된 오브젝트의 압축 및 압축해제 | |
CN110167756B (zh) | 用于通过增材制造构造实体物体的基于构建方向的划分 | |
US11200737B2 (en) | Adaptive mesh non-regularized Booleans | |
CN113724401B (zh) | 一种三维模型切割方法、装置、计算机设备和存储介质 | |
Dassi et al. | Curvature-adapted remeshing of CAD surfaces | |
CN108073682A (zh) | 基于参数视图函数查询数据库 | |
EP3264286A1 (en) | Querying a database with morphology criterion | |
CN115222806B (zh) | 多边形处理方法、装置、设备及计算机可读存储介质 | |
CN115294258A (zh) | 三维模型的展开方法、装置、设备及计算机可读存储介质 | |
CN114494708A (zh) | 基于多模态特征融合点云数据分类方法及装置 | |
CN115564925A (zh) | 基于B-rep模型和笛卡尔网格切片的网格生成方法 | |
CN114119939A (zh) | 数据轻量化处理方法、装置、存储介质及电子设备 | |
CN115203769A (zh) | 用于自动标注绘图尺寸的图形对准技术 | |
CN112823381A (zh) | 从三角形网格生成风格化的四边形网格的技术 | |
Danilov | Unstructured tetrahedral mesh generation technology | |
US20120206456A1 (en) | Methods and Systems for Generating Continuous Surfaces from Polygonal Data | |
Schmidt et al. | Adaptive mesh booleans |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40075792 Country of ref document: HK |