总第
261期2011年第
7期计算机与数字工程
Com
puter
&Di
gital
En
gineerin
gVol.39No.7
57
基于格网划分的
Delauna
y三角剖分算法研究*
李小丽
陈花竹
(
河南大学软件学院
郑州
450000)
摘
要
为了提高海量数据的
Delauna
y三角网的构网速度,
本文采用格网划分的三角剖分方法,
首先将数据按照线性
四叉树方式划分为若干格网块,
构建块内子三角网,
然后按照自下而上的合并方式对块进行合并,
形成全局
Delauna
y三角
网。
在此基础上,
为了避免出现过小锐角的情况,
通过加入约束角来对三角格网进行优化。
关键词
Delauna
y;
格网划分;
约束角
中图分类号
TP301.6
Stud
yof
Massive
Data
Delauna
yTrian
gulation
Based
on
Grid
Partition
Method
Li
Xiaoli
Chen
Huazhu
(
Software
Colle
ge,
Henan
Universit
y,
Zhen
gzhou
450000)
Abstract
To
raise
the
s
peed
of
the
construction
of
Delauna
y
trian
gulation
oriented
massive
data,
this
thesis
uses
the
grid
partition
method.At
first,
it
divides
the
data
into
certain
grid
tiles
b
y
quadtree
method,
constructs
sub
Delauna
y
trian
-
gulation.Then,
it
mer
ges
two
trian
gulations
from
bottom
u
p
to
form
the
whole
Delauna
y
trian
gulation.On
the
basis
of
that,
to
avoid
producin
g
too
acute
an
gles,
we
give
a
threshold
an
gle
to
im
prove
the
an
gles
of
the
trian
gulation.
Ke
y
Words
Delauna
y,
grid
partition,
threshold
an
gle
Class
Number
TP301.6
1
引言
Delauna
y三角网在地形拟合、
三维建模、
有限
元分析等方面应用广泛。
并且它具有空外接圆、
最
小内角最大以及唯一性等重要性质,
Delauna
y三
角网一直被公认为是优的三角剖分。
经过长期的
研究,
国内外出现了大量算法,
主要归纳为三类:
逐
点插入算法、
三角网生长算法和分治算法。
近年来
随着
Delauna
y三角网在应用领域的不断拓展以及
应用需求的不断深入,
特别是对海量数据的管理和
分析,
已成为
Delauna
y三角剖分的一大研究热点,
并出现了格网划分的的三角剖分思想[
1]。
本文在
点插入算法和分治算法的基础上,
采用格网划分的
思想,
对海量数据进行分块管理和构建,
希望获得较高的算法效率。
并对加入了约束角的三角格网
如何优化进行了分析。
2
基于格网划分的
Delauna
y三角剖
分算法
随着科学技术的不断发展,
海量数据的廉价获
取已成为可能,
而且目前人们在可视化方面的要求
也越来越高,
那么针对海量数据的管理和分析也越
来越普遍。
但是普通计算机仍无法满足对海量数
据处理的要求,
即便是硬件配置较高的计算机,
当
数据量达到一定程度后仍无法正常处理。
怎么在
普通计算机上进行海量数据的
Delauna
y三角网构
建是一个亟待解决的问题[
1]。
本文采用基于格网
划分的海量数据
Delauna
y三角剖分算法,
通过分
*收稿日期:2011年
1月
9日,
修回日期:
2011年
2月
17日作者简介:李小丽,
女,
硕士研究生,
助教,
研究方向:
地理信息系统。
陈花竹,
女,
硕士研究生,
助教,
研究方向:
偏微分
方程的图像处理。58
李小丽等:
基于格网划分的
Delauna
y三角剖分算法研究第
39卷
块的方式来对海量数据进行管理[
2~3]。
当在三角
网中进行点的插入删除操作时,
可以快速定位其所
在的块并确定影响区域,
进而提高了构网速度,
降
低了对计算机硬件的要求较低,
便于对三角网进行
更新维护。
2.1
格网划分
首先计算区域内的最大点密度,
根据此点密
度,
确定正方形格网的行列宽,
保证每个网格中点
的数目在一定范围之内。
通过线性四叉树分割方
式对区域进行格网划分,
并对每块进行四叉树编
码。
为了解决块内点数目不均的状况,
当块内点数
过小时,
根据线性四叉树编码方式对块自下而上进
行合并。
2.2
块内构建
Delauna
y三角网
在格网块内通过逐点插入算法构建
Delauna
y
三角网,
逐点插入算法的基本步骤是:
1)
定义一个
包含所有数据点的初始凸多边形;
2)
对初始凸多
边形通过环切边界法进行初始三角剖分,
然后重复
3)、
4)
步,
直至所有数据点被处理完毕;
3)
插入新
数据点
P,
首先找出所有其外接圆包含
P点的三角
形,
并删除离
P点最近的边,
形成一个
Delauna
y空
腔,
然后连接点
P与空腔的每一个顶点;
4)
以
LOP算法优化三角网[
4]。
本文将块内的
Delauna
y
三角网的三角形分为如下四类:
形状可能改变的三
角形,
拓扑关系可能改变的三角形、
第二类三角形
的邻接三角形、
除上述之外的三角形[
1]。
当块内
Delauna
y三角网构建完毕之后,
将当前块的
Delauna
y三角网的结果存入空间数据库或其它数
据文件,
而仅将受邻接格网内的点影响的边界三角
形及其邻近三角形驻入内存(
第一类、
二类、
三类三
角形)。
2.3
格网块
Delauna
y三角网合并
块内三角形构建完毕之后,
按照四叉树编码的
逆序,
自下而上的进行格网块间的合并[
3]。
对两
Delauna
y子三角网的合并首先找到两个子三角网
合并的顶线和底线,
从底线开始构建三角形,
在此
过程中伴随删除非
Delauna
y三角形,
直到顶线结
束。
由于位置的不同,
相邻两
Delauna
y子三角网
合并可分为左右和上下两种合并情况。
格网块
Delauna
y三角网合并的方式与上述
Delauna
y子三角网合并的方式相同,
首先找出两
Delauna
y三角网合并的顶线与底线,
然后从顶线开始到底线结束,
该过程伴随着非
Delauna
y三角
形的删除和新
Delauna
y三角形的生成。
根据分析可知当两块进行合并时,
第一类和第二类三角形将
受到影响,
第三类和第四类不会受到影响。
这两个格网块的并集形成一个新格网块,
对该
格网块重新选择其第一、
二、
三类三角形(
只需把两
个格网块相邻的三角形进行判断),
把第三、
四类三
角形存入空间数据库或其它数据文件,
释放第四类
三角形占用的内存,
这样只有新格网块的第一、
二、
三类三角形驻入内存,
为后续格网块的网合并做好
准备。
按照线性四叉树编码,
自下而上的方式进行
两
Delauna
y三角网合并,
重复上述步骤,
直至所有
格网块都处理完毕,
再把驻入内存的三角形存入空
间数据库或其它数据文件,
释放内存,
整个构网结
束。
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的底线。
同