CN102663789A - 将二维平面内含洞及岛的多边形三角化的方法 - Google Patents
将二维平面内含洞及岛的多边形三角化的方法 Download PDFInfo
- Publication number
- CN102663789A CN102663789A CN201210114844XA CN201210114844A CN102663789A CN 102663789 A CN102663789 A CN 102663789A CN 201210114844X A CN201210114844X A CN 201210114844XA CN 201210114844 A CN201210114844 A CN 201210114844A CN 102663789 A CN102663789 A CN 102663789A
- Authority
- CN
- China
- Prior art keywords
- polygon
- hole
- limit
- summit
- triangle
- 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.)
- Pending
Links
Landscapes
- Image Generation (AREA)
Abstract
本发明涉及一种计算机处理多边形的三角化的方法,解决多边形三角化的处理过程中存的算法复杂,不易于计算机程序逻辑的实现等问题,实现方法是:一种将二维平面内含洞及岛的多边形三角化的方法,其特征包括以下步骤:a.在平面内抽取含洞及岛多边形的顶点和边,去除冗余,建立边和顶点的集合;b.重新组合,形成新的独立的多边形和洞的集合;c.确立多边形与洞之间的存在的关系;d.分割每一个独立含洞多边形为三角形的弦集合;e.将每个独立含洞多边形的边与弦组成候选三角形集合;f. 筛选排除掉候选三角形集合中重复或不合理的三角形,形成有效三角面数据集合。
Description
技术领域
本发明涉及一种计算机处理多边形的三角化的方法,特别是涉及到在含洞多边形的三角化的方法。
背景技术
平面多边形的三角化就是在现有多边形中不添加新的顶点,只添加分割线(或称作弦),使平面多边形分割为一系列不重叠的三角形。三角形是目前计算机图形学中各类三维图形程序开发接口(如DirectX、OpenGL、OpenSceneGraph)的基本图元,普通的不规则二维多边形信息并不能被这些开发接口直接使用,必须细分为能够构成该多边形的三角形集合,并将其以该三角形集合信息的方式递交给对应的开发接口函数,才能正常处理或显示该多边形。
二维多边形一般分为两类,凸多边形和凹多边形。所谓凸多边形,就是把一个多边形任意一边向两方无限延长成为一条直线,如果多边形的其他各边均在此直线的同旁,那么这个多边形就叫做凸多边形。如果多边形的所有边中有任一条边向两方无限延长成为一直线时,其他各边不在此直线的同旁,那么这个多边形就是凹多边形。凹多边形有一个或多个内角大于180度。
二维多边形如果含有封闭的洞,则称为二维含洞多边形。
二维含洞多边形的洞中如果还有多边形则称该洞内的多边形为岛。称整个图形为嵌套含岛多边形。岛可以含有洞,并且内含一个或多个岛。
二维多边形的三角化方法对于现代三维计算机图形学必不可少,因而往往会根据不同情况采用专用算法。比如对于凸多边形采用割角法,但不适用于凹多边形,所以对于凹多边形一般采用先分块再针对每块分割后的图形采用凸多边的割角法。这些方法易于实现,算法成熟,且效率令人满意,但往往只适用于特定的多边形类别,不能够应用于含洞、含岛的特型多边形。
现有技术中也有对于含洞含岛多边形的处理算法,有些方法效率非常高,但算法复杂,不易于计算机程序逻辑的实现,或是不易于分块对算法的特定步骤进行优化和修改,对于大型实际项目的品质管理和后续维护造成不利影响。
发明内容
本发明的目的是:解决现有技术中存在的技术难题,即在以往解决多边形三角化的处理过程中存的算法复杂,不易于计算机程序逻辑的实现等问题,另一方面还解决了以往技术所不能解决的含洞的多边形的三角化问题。
为完成上述发明目的,本发明是这样实现的:一种将二维平面内含洞及岛的多边形三角化的方法,其特征包括以下步骤:
a. 在平面内抽取含洞及岛多边形的顶点和边,去除冗余,建立边和顶点的集合;
b. 重新组合,形成新的独立的多边形和洞的集合;
c. 确立多边形与洞之间的存在的关系;
d. 分割每一个独立含洞多边形为三角形的弦集合;
e. 将每个独立含洞多边形的边与弦组成候选三角形集合;
f. 筛选排除掉候选三角形集合中重复或不合理的三角形,形成有效三角面数据集合。
对上述技术方案作进一步的改进,在a步骤中,确立顶点集合时,每一个顶点由xOy平面内的坐标值X,Y定义;每个顶点赋予一个索引号。在同平内确立一个顶点的办便是通过其顶点坐标来确定,本专利也不例外。
对上述技术方案作进一步的细化,在a步骤中,确立边集合时,每一条边由2个相邻的顶点索引号构成一条边,每条边赋予一个索引号。这是本专利的一大特点,以往定边是由两点来确定,这也是一个通常的办法,不过本专利采用的是两个索引号来定一条边,从而对存储和计算都带来了便利。
对上述技术方案作进一步的细化,在步骤b中,多边形与洞之间的存在的关系的具体方法是:通过计算洞的任一顶点A与多边形的任一顶点B的连线和以B点为结束点的多边形边的夹角是否在构成多边形B顶点的两条边的夹角范围外,确认该洞是否在该多边形外,如果所有洞的顶点都在指定的多边形中,那么这个洞就在多边形中;从而得到一个含洞多边形集。该方法独特,通用性强,在何种情况均能使用。
对上述技术方案作进一步的改进,从构成一个含洞多边形的任意一个顶点开始,依次尝试与该含洞多边形其他顶点作连线,如果连线与已有边或之前生成的弦重合则舍弃,如果连线与已有边或之前生成的弦相交则舍弃,否则保留该连线作为弦,并继续尝试连线,直到不能作出新的弦为止。在e步中,通过遍历算法计算出所有可能的三角形;遍历从任意一点开始,遍历完所有含洞多边形的顶点和其内部洞的顶点为结束。
每次从起始顶点起,经过3条弦或边,3条所经过的弦或边不可重复的前提下,如果第3条弦或边的终点与起点为同一点,则将所经过的3条边作为一个候选三角形保留;该步骤完全完成后,所有候选三角形即构成候选三角形集合。
筛选排除掉候选三角形集合中重复或不合理的三角形,形成有效三角面数据集合;其具体方法是:用一个三角形的任意顶点C与另一三角形任意顶点D的连线,和以该另一三角形顶点D为终点的边之间的夹角是否在构成该另一三角形顶点D的两条边的夹角内,如果是,则说明该三角形位于另一三角形内。本方法是为了三角化后,消除重复叠加的无用冗余三角形,这类三角形内嵌套的子三角需要去处。
将所有被保留的三角形2条边通过叉乘之积的正负结果,判断三角形的构成顶点顺序是否符合图形API所需的顺时针或逆时针方向,如不符合指定的顶点顺序,交换任意2个顶点顺序使其符合。这样可以避免三角形在描画时被用户使用的图形API的背面消隐功能所隐藏。
该方法易于计算机程序分块实现和维护,并且通用的二维平面多边形三角化的方法,允许多边形存在含有任意个洞,嵌套任意个岛的特殊情况。该方法易于分块理解并单独实现,步骤之间的的衔接数据结构简单,因而方法整体上维护方便。每个步骤可以模块化,并可以采用对应领域的高效算法单独实现,因而可以按需优化,不牺牲过多的效率。同时因为不限于实心多边形处理,也可对应含洞、含岛的多变形,因而通用性好,实用性强。
具体实施方式
下面根据具体实施例对本发明进行详细描述:
一种将二维平面内含洞及岛的多边形三角化的方法,其包括如下步骤:
(1)获取原始数据,将原始数据抽象,并存储为多边形的顶点、边集合以及洞的顶点、边集合。边集合构成的是洞还是多边形由数据输入方指定。数据的逻辑存储格式不限,但是用户输入的原始数据经过抽象表达后应包含以下内容:
顶点坐标:由xOy平面内的坐标值(X,Y)定义。
顶点索引号:每个顶点赋予一个索引号,多个坐标相同的顶点当作一个顶点对待,只赋予一次索引号,避免数据冗余。
边的构成:由2个顶点索引号构成一条边
边的索引号:每条边赋予一个索引号,构成顶点相同的边当作一条边处理,只赋予一次索引号,避免数据冗余。
多边形/洞的构成时所需边的索引号
(2)通过对顶点、边集合的计算筛除孤立无法构成多边形或洞的边,得到有效的多边形集合和有效的洞集合。
在该步骤中,通过深度遍历搜索算法确认每个独立多边形或岛的构成边的连通性。辨识数据为指定多边形或岛的各条构成边的索引号,以及由此引出的各条边的起始/结束顶点索引号。其辨识标准是存在一条由若干条首尾相接的无重复边构成的最长路径使该路径的终点和起点所在的顶点索引号相同,则这一系列路径是连通的,也即表明当前验证中的多边形或岛是正常封闭的,适用于后续计算步骤的进行。
在该步骤中,通过与确认多边形和岛的有效性的相同方法确认洞的边的连通性,以验证洞是正常封闭的,适用于后续计算步骤的进行。
(3)通过计算判定洞与多边形的关系,确定洞所归属的多边形,从而确定含洞多边形。在该步骤中,通过计算洞的任一顶点A与多边形的任一顶点B的连线和以B点为结束点的多边形边的夹角是否在构成多边形B顶点的两条边的夹角范围外,确认该洞是否在该多边形外。如果所有洞的顶点都在指定的多边形中,那么这个洞就在多边形中。
确认了所有的洞和多边形的关系后,就得到了一个含洞多边形集合。
所谓含洞多边形集和就是将所有有效的含有或不含有洞的多边形以及岛都放到一个平坦的关系级别上,这个过程本身并不涉及任何算法,只是为了消除洞和岛之间的肉眼视觉上的嵌套关系,使岛在后续运算中与包裹着它的环状多边形一样都被同一看作是待作三角化处理的几何图形,以便能够由相同的算法进行处理。这一步是数据组织上的处理,但是这一步处理使多边形、含洞多边形、岛、含洞的岛之间的差异得到消除,方便了之后进行通适的遍历算法来对该集合中每一个个体进行分别三角化。
(4)通过计算得到可以分割每一个独立含洞多边形为三角形的弦集合。
在该步骤中,从构成一个含洞多边形的任意一个顶点开始,依次尝试与该含洞多边形其他顶点作连线,如果连线与已有边或之前生成的弦重合则舍弃,如果连线与已有边或之前生成的弦相交则舍弃,否则保留该连线作为弦,并继续尝试连线,直到不能作出新的弦为止。以该方法依次尝试从该含洞多边形以及其内含洞上的其他顶点开始建立弦。最终,每一个独立含洞多边形都会有一个分割弦集合。根据起始尝试顶点的顺序不同,可能弦集合的形态和分布不同,但只要是按照上述做法保留下的弦形成的弦集合,都是有效的,可以用于进行接下去的运算。
(5)通过计算将每个独立含洞多边形的边与弦组成候选三角形集合。
在这一步骤中,通过遍历算法计算出所有可能的三角形;遍历从任意一点开始,遍历完所有含洞多边形的顶点和其内部洞的顶点为结束。每次从起始顶点起,经过3条弦或边,3条所经过的弦或边不可重复的前提下,如果第3条弦或边的终点与起点为同一点,则将所经过的3条边作为一个候选三角形保留。该步骤完全完成后,所有候选三角形即构成候选三角形集合。
(6)筛选排除掉候选三角形集合中重复或不合理的三角形,形成有效三角面数据集合。
通过比较每个三角形的构成点,去除重复的三角形。只要是构成边相同(也即构成顶点索引号相同)的三角形,当作重复三角形,只保留1个作为有效三角形。
筛选出包含在其他三角形中的三角形,将其去除。一个三角形的任意顶点C与另一三角形任意顶点D的连线,和以该另一三角形顶点D为终点的边之间的夹角是否在构成该另一三角形顶点D的两条边的夹角内,如果是,则说明该三角形位于另一三角形内。为了三角化后,消除重复叠加的无用冗余三角形,这类三角形内嵌套的子三角需要去处。
在该步骤中,将所有被保留的三角形2条边通过叉乘之积的正负结果,判断三角形的构成顶点顺序是否符合图形API所需的顺时针或逆时针方向(DirectX需要顺时针,OpenGL需要逆时针,其他图形API各不相同),如不符合指定的顶点顺序,交换任意2个顶点顺序使其符合。这样可以避免三角形在描画时被用户使用的图形API的背面消隐功能所隐藏。
例如:设三角形由ABC构成,AB边到AC的逆时针经过角度为θ,取AB和AC两条边作叉乘
根据叉乘性质有
AB x AC = ň|AB||AC|sinθ ①
(其中ň是垂直于三角形所在平面的单位向量)
因为①式中sinθ元素决定了结果的正负,因此只需要根据sinθ结果来判定顶点描画顺序:
如果sinθ>0,即表示θ在(0,π)范围内,因此ABC三点构成逆时针序,对于OpenGL可以直接按ABC的顺序进行描画,对于DirectX,需要交换其中任意2个顶点顺序,使其变为逆时针序,按ACB或BAC或CBA的顺序进行描画
如果sinθ<0,即表示θ在(π,2π)范围内,因此ABC三点构成顺时针序,对于DirectX可以直接按ABC的顺序进行描画,对于OpenGL就需要交换其中任意2个顶点顺序后才能进行正常描画。
在第(3)步时,已经将岛泛化为含洞多边形,因此上述6步骤完成后,所有多边形(含洞的,不含洞的,嵌套的岛,多级嵌套于其他多边形中的岛)都已正常三角化,不再需要对岛进行特化运算。
Claims (9)
1.一种将二维平面内含洞及岛的多边形三角化的方法,其特征在于:包括以下步骤:
a. 在平面内抽取含洞及岛多边形的顶点和边,去除冗余,建立边和顶点的集合;
b. 重新组合,形成新的独立的多边形和洞的集合;
c. 确立多边形与洞之间的存在的关系;
d. 分割每一个独立含洞多边形为三角形的弦集合;
e. 将每个独立含洞多边形的边与弦组成候选三角形集合;
f. 筛选排除掉候选三角形集合中重复或不合理的三角形,形成有效三角面数据集合。
2.根据权利要求1所述的一种将二维平面内含洞及岛的多边形三角化的方法,其特征在于:在a步骤中,确立顶点集合时,每一个顶点由xOy平面内的坐标值(X,Y)定义;每个顶点赋予一个索引号。
3.根据权利要求2所述的一种将二维平面内含洞及岛的多边形三角化的方法,其特征在于:在a步骤中,确立边集合时,每一条边由2个相邻的顶点索引号构成一条边,每条边赋予一个索引号。
4.根据权利要求2所述的一种将二维平面内含洞及岛的多边形三角化的方法,其特征在于:在步骤b中,多边形与洞之间的存在的关系的具体方法是:通过计算洞的任一顶点A与多边形的任一顶点B的连线和以B点为结束点的多边形边的夹角是否在构成多边形B顶点的两条边的夹角范围外,确认该洞是否在该多边形外,如果所有洞的顶点都在指定的多边形中,那么这个洞就在多边形中;从而得到一个含洞多边形集。
5.根据权利要求4所述的一种将二维平面内含洞及岛的多边形三角化的方法,其特征在于:从构成一个含洞多边形的任意一个顶点开始,依次尝试与该含洞多边形其他顶点作连线,如果连线与已有边或之前生成的弦重合则舍弃,如果连线与已有边或之前生成的弦相交则舍弃,否则保留该连线作为弦,并继续尝试连线,直到不能作出新的弦为止。
6.根据权利要求4所述的一种将二维平面内含洞及岛的多边形三角化的方法,其特征在于:在e步中,通过遍历算法计算出所有可能的三角形;遍历从任意一点开始,遍历完所有含洞多边形的顶点和其内部洞的顶点为结束。
7.根据权利要求6所述的一种将二维平面内含洞及岛的多边形三角化的方法,其特征在于:每次从起始顶点起,经过3条弦或边,3条所经过的弦或边不可重复的前提下,如果第3条弦或边的终点与起点为同一点,则将所经过的3条边作为一个候选三角形保留;该步骤完全完成后,所有候选三角形即构成候选三角形集合。
8.根据权利要求7所述的一种将二维平面内含洞及岛的多边形三角化的方法,其特征在于:筛选排除掉候选三角形集合中重复或不合理的三角形,形成有效三角面数据集合;其具体方法是:用一个三角形的任意顶点C与另一三角形任意顶点D的连线,和以该另一三角形顶点D为终点的边之间的夹角是否在构成该另一三角形顶点D的两条边的夹角内,如果是,则说明该三角形位于另一三角形内。
9.根据权利要求8所述的一种将二维平面内含洞及岛的多边形三角化的方法,其特征在于:将所有被保留的三角形2条边通过叉乘之积的正负结果,判断三角形的构成顶点顺序是否符合图形API所需的顺时针或逆时针方向,如不符合指定的顶点顺序,交换任意2个顶点顺序使其符合。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210114844XA CN102663789A (zh) | 2012-04-19 | 2012-04-19 | 将二维平面内含洞及岛的多边形三角化的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210114844XA CN102663789A (zh) | 2012-04-19 | 2012-04-19 | 将二维平面内含洞及岛的多边形三角化的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102663789A true CN102663789A (zh) | 2012-09-12 |
Family
ID=46773267
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210114844XA Pending CN102663789A (zh) | 2012-04-19 | 2012-04-19 | 将二维平面内含洞及岛的多边形三角化的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102663789A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105590333A (zh) * | 2015-11-28 | 2016-05-18 | 中国石油大学(华东) | 一种基于三角形区域方程判断点与面拓扑关系的方法 |
CN106548505A (zh) * | 2016-10-21 | 2017-03-29 | 天津大学 | 用于三维射线跟踪的场景模型快速三角化方法 |
WO2018132989A1 (zh) * | 2017-01-19 | 2018-07-26 | 深圳市百能信息技术有限公司 | 一种弧段多边形二维布尔运算方法 |
CN108765539A (zh) * | 2018-05-24 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 基于OpenGLES的图像渲染方法、装置、设备及存储介质 |
-
2012
- 2012-04-19 CN CN201210114844XA patent/CN102663789A/zh active Pending
Non-Patent Citations (6)
Title |
---|
《计算机与现代化》 20040530 邓先礼等 "多连通多边形三角化找桥算法的研究及实现" 第1,5-6页,图1-4 1-9 , 第5期 * |
《计算机应用研究》 20081015 毕林等 "快速多边形区域三角化算法与实现" 3030-3033 1-9 第25卷, 第10期 * |
《重庆工学院学报(自然科学版)》 20080315 丁瑶 "基于三角化理论的多边形内点自动生成算法" 13-15 1-9 第22卷, 第3期 * |
丁瑶: ""基于三角化理论的多边形内点自动生成算法"", 《重庆工学院学报(自然科学版)》 * |
毕林等: ""快速多边形区域三角化算法与实现"", 《计算机应用研究》 * |
邓先礼等: ""多连通多边形三角化找桥算法的研究及实现"", 《计算机与现代化》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105590333A (zh) * | 2015-11-28 | 2016-05-18 | 中国石油大学(华东) | 一种基于三角形区域方程判断点与面拓扑关系的方法 |
CN106548505A (zh) * | 2016-10-21 | 2017-03-29 | 天津大学 | 用于三维射线跟踪的场景模型快速三角化方法 |
CN106548505B (zh) * | 2016-10-21 | 2019-08-13 | 天津大学 | 用于三维射线跟踪的场景模型快速三角化方法 |
WO2018132989A1 (zh) * | 2017-01-19 | 2018-07-26 | 深圳市百能信息技术有限公司 | 一种弧段多边形二维布尔运算方法 |
CN108765539A (zh) * | 2018-05-24 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 基于OpenGLES的图像渲染方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Campen et al. | Exact and robust (self‐) intersections for polygonal meshes | |
Zhou et al. | Edge bundling in information visualization | |
CN102194253B (zh) | 一种面向三维地质层面结构的四面体网格生成方法 | |
CN107767453B (zh) | 一种基于规则约束的建筑物lidar点云重构优化方法 | |
CN101937579B (zh) | 一种利用透视草图创建三维曲面模型的方法 | |
CN109360260A (zh) | 一种三角网格三维模型的切挖重构算法 | |
CN102136155A (zh) | 基于三维激光扫描数据的物体立面矢量化方法和系统 | |
CN102812463A (zh) | 能够进行三维对象模型的3d印刷的方法和系统 | |
CN102568038A (zh) | 将二维工程图上的尺寸转移到三维cad模型上的方法 | |
CN107622530B (zh) | 一种高效鲁棒的三角网切割方法 | |
KR20120089707A (ko) | 기계가공 시뮬레이션과 그 시뮬레이션을 시각적으로 제공하기 위한 방법, 컴퓨터 시스템, 그리고 컴퓨터 프로그램 제품 | |
CN102521870A (zh) | 一种微多边形光线跟踪的着色重用方法 | |
CN104134236B (zh) | 一种三维平面实体的布尔运算方法 | |
CN102663789A (zh) | 将二维平面内含洞及岛的多边形三角化的方法 | |
CN109472871A (zh) | 一种三维模型重建方法、系统及电子设备 | |
CN114359226A (zh) | 基于分层叠加和区域增长的三维模型组可视面积提取方法 | |
Lee et al. | Generative CAPP through projective feature recognition | |
CN115661374A (zh) | 一种基于空间划分和模型体素化的快速检索方法 | |
CN104851127A (zh) | 一种基于交互的建筑物点云模型纹理映射方法及装置 | |
KR100940283B1 (ko) | 동일해상도의 옥트리 구조에서의 인접한 이웃셀의 주소검색방법 | |
CN108898679A (zh) | 一种零部件序号自动标注的方法 | |
Xu et al. | Developing an extended IFC data schema and mesh generation framework for finite element modeling | |
CN103150711A (zh) | 一种基于OpenCL的图像修复方法 | |
CN108510579B (zh) | 一种工业复杂裁剪曲面的渲染显示方法 | |
CN108133502B (zh) | 一种业务流程图的展示方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120912 |