基于格网划分的Delaunay三角剖分算法研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
总第261期
2011年第7期
计算机与数字工程
Computer &Digital Engineering
Vol.39No.7
57
基于格网划分的Delaunay三角剖分算法研究*
李小丽 陈花竹
(河南大学软件学院 郑州 450000)
摘 要 为了提高海量数据的Delaunay三角网的构网速度,本文采用格网划分的三角剖分方法,首先将数据按照线性四叉树方式划分为若干格网块,构建块内子三角网,然后按照自下而上的合并方式对块进行合并,形成全局Delaunay三角网。在此基础上,为了避免出现过小锐角的情况,通过加入约束角来对三角格网进行优化。
关键词 Delaunay;格网划分;约束角
中图分类号 TP301.6
Studyof Massive Data DelaunayTriangulation
Based on Grid Partition Method
Li Xiaoli Chen Huazhu
(Software College,Henan University,Zhengzhou 450000)
Abstract To raise the speed of the construction of Delaunay triangulation oriented massive data,this thesis uses thegrid partition method.At first,it divides the data into certain grid tiles by quadtree method,constructs sub Delaunay trian-gulation.Then,it merges two triangulations from bottom up to form the whole Delaunay triangulation.On the basis of that,to avoid producing too acute angles,we give a threshold angle to improve the angles of the triangulation.Key Words Delaunay,grid partition,threshold angle
Class Number TP301.6
1 引言
Delaunay三角网在地形拟合、三维建模、有限元分析等方面应用广泛。并且它具有空外接圆、最小内角最大以及唯一性等重要性质,Delaunay三角网一直被公认为是优的三角剖分。经过长期的研究,国内外出现了大量算法,主要归纳为三类:逐点插入算法、三角网生长算法和分治算法。近年来随着Delaunay三角网在应用领域的不断拓展以及应用需求的不断深入,特别是对海量数据的管理和分析,已成为Delaunay三角剖分的一大研究热点,并出现了格网划分的的三角剖分思想[1]。本文在点插入算法和分治算法的基础上,采用格网划分的思想,对海量数据进行分块管理和构建,希望获得
较高的算法效率。并对加入了约束角的三角格网如何优化进行了分析。
2 基于格网划分的Delaunay三角剖分算法
随着科学技术的不断发展,海量数据的廉价获取已成为可能,而且目前人们在可视化方面的要求也越来越高,那么针对海量数据的管理和分析也越来越普遍。但是普通计算机仍无法满足对海量数据处理的要求,即便是硬件配置较高的计算机,当数据量达到一定程度后仍无法正常处理。怎么在普通计算机上进行海量数据的Delaunay三角网构建是一个亟待解决的问题[1]。本文采用基于格网划分的海量数据Delaunay三角剖分算法,通过分
*收稿日期:2011年1月9日,修回日期:2011年2月17日
作者简介:李小丽,女,硕士研究生,助教,研究方向:地理信息系统。陈花竹,女,硕士研究生,助教,研究方向:偏微分方程的图像处理。
58
李小丽等:基于格网划分的Delaunay三角剖分算法研究第39卷
块的方式来对海量数据进行管理[2~3]
。当在三角网中进行点的插入删除操作时,可以快速定位其所在的块并确定影响区域,
进而提高了构网速度,降低了对计算机硬件的要求较低,便于对三角网进行更新维护。2.1 格网划分
首先计算区域内的最大点密度,根据此点密度,
确定正方形格网的行列宽,保证每个网格中点的数目在一定范围之内。通过线性四叉树分割方式对区域进行格网划分,并对每块进行四叉树编码。为了解决块内点数目不均的状况,当块内点数过小时,根据线性四叉树编码方式对块自下而上进行合并。
2.2 块内构建Delaunay三角网
在格网块内通过逐点插入算法构建Delaunay三角网,逐点插入算法的基本步骤是:1)定义一个包含所有数据点的初始凸多边形;2)对初始凸多边形通过环切边界法进行初始三角剖分,然后重复3)、4)步,直至所有数据点被处理完毕;3)插入新数据点P,首先找出所有其外接圆包含P点的三角形,并删除离P点最近的边,形成一个Delaunay空腔,然后连接点P与空腔的每一个顶点;4)以
LOP算法优化三角网[4]
。本文将块内的Delaunay
三角网的三角形分为如下四类:形状可能改变的三角形,
拓扑关系可能改变的三角形、第二类三角形的邻接三角形、除上述之外的三角形[
1]
。当块内Delaunay三角网构建完毕之后,将当前块的Delaunay三角网的结果存入空间数据库或其它数据文件,而仅将受邻接格网内的点影响的边界三角形及其邻近三角形驻入内存(第一类、二类、三类三角形)
。2.3 格网块Delaunay三角网合并
块内三角形构建完毕之后,按照四叉树编码的
逆序,自下而上的进行格网块间的合并[
3]
。对两Delaunay子三角网的合并首先找到两个子三角网合并的顶线和底线,从底线开始构建三角形,在此过程中伴随删除非Delaunay三角形,直到顶线结束。由于位置的不同,相邻两Delaunay子三角网合并可分为左右和上下两种合并情况。
格网块Delaunay三角网合并的方式与上述Delaunay子三角网合并的方式相同,首先找出两Delaunay三角网合并的顶线与底线,然后从顶线
开始到底线结束,该过程伴随着非Delaunay三角Delaunay根据分析
可知当两块进行合并时,
第一类和第二类三角形将受到影响,第三类和第四类不会受到影响。
这两个格网块的并集形成一个新格网块,对该格网块重新选择其第一、二、三类三角形(只需把两个格网块相邻的三角形进行判断),把第三、四类三角形存入空间数据库或其它数据文件,
释放第四类三角形占用的内存,这样只有新格网块的第一、二、三类三角形驻入内存,为后续格网块的网合并做好准备。按照线性四叉树编码,自下而上的方式进行两Delaunay三角网合并,重复上述步骤,直至所有格网块都处理完毕,再把驻入内存的三角形存入空间数据库或其它数据文件,释放内存,整个构网结束。
3 算法流程
在分块的过程中,为了提高分块的效率和便于合并,我们对块采用线性四叉树编码方式,并且使用自下而上的合并方式对块进行合并。
第一步:划分格网块
为了避免出现块内点数目过大的情况,我们首先找出区域内点的最大密度,
根据此密度,按照线性四叉树划分方式确定初始格网,并对每块进行编码。在为每个点确定格网块时,记录每块内的点数。然后根据块内点数情况,如果点数过小则按照自下而上的方式合并块。
第二步:块内建立子三角网[
5~6]
1
)建立初始凸多边形2
)采用环切法建立初始三角形网3)采用点插入法插入剩余点。从而建立了子三角形网。
第三步:合并块
图1 两子网合并
现有两个凸壳HL、HR,寻找连接HL、HR的顶线和底线过程如下:找到HL
最右边的点X和
HR最左边的点Y,从连接X、Y点的线段XY开始,如果HR上Y的逆时针方向相邻点Z位于线段XY的下侧,则用Z替换Y,直到HR上的所有点都位于XY之上。然后考察HL,如果HL上X的顺时针方向上相邻的点K位于XY的下侧,则用Z替换X,直到HL上的所有点都位于XY之上。最终形成的线段ab就是连接HL、HR的底线。同