不规则三角网
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
不规则三角网的构建
曹宁0211555
摘要:在GIS应用领域中,Delaunay三角网通常被应用在生成不规则三角网(TIN)模型,并用于描述地表形态。本篇文章就目前较为成熟的算法做简要介绍,并对用于构建Delaunay三角网的渐次插入算法(闫浩文,2002)在VC++环境下实现的过程做较为详细的介绍。
关键词:不规则三角网;VC++;渐次插入算法
Abstract:In GIS applications, the Delaunay triangulation Netcom often used to generate atriangulated irregular network (TIN) model, and is used to describe the surface morphology. This article is a brief introduction to the more sophisticated algorithms,and detailed introduce the implementation process of gradually insert of the Delaunay triangulation algorithm (Yan Hao, 2002) in VC + + environment.
Keywords:TIN;VC++; gradually insert algorithm
一、引言
TIN(Triangulated Irregular Network)即不规则三角网,Delaunay三角网是其中的一种表现形式,也是一种主要的DTM的表示法。
Delaunay三角网:它是一系列相连的但不重叠的三角形的集合,而且这些三角形的外接圆不包含这个面域的其他任何点,它具有两个特有的性质:每个Delaunay三角形的外接圆不包含面内的其他任何点,称之为Delaunay三角网的空外接圆性质,这个特性已经作为创建Delaunay三角网的一项判别标准。
它的另一个性质是最大最小角性质:在由点集V中所能形成的三角网中,Delaunay三角网中的三角形的最小角度是最大的。
Delaunay三角网的优点是结构良好,数据结构简单,数据冗余度小,存储效率高,与不规则的地面特征和谐一致,可以表示线性特征和迭加任意形状的区域边界,易于更新,可适应各种分布密度的数据等;局限性是。算法实现比较复杂和困难。
Delaunay三角网是V oronoi图的对偶图,他们两个是被普遍接受和采用的分析研究区域离散数据的有力工具。它是通过连接具有公共顶点的三个V多边形的生长中心而生成的。如图1.1。
图1.1 Delaunay三角网与V oronoi图
二、几种常见的算法
2.1 凸包插值算法
(1)凸包生成。①求出点集中满足min(x-y)、min(x+y)、max(x-y)、max (x+y)的四个点,并按照逆时针方向组成一个链表。这四个点是离散点中与包含离散点的外接矩形的四个角点最接近的点,这四个点构成的多边形作为初始凸包。
②对于每个凸包上的点I,设它的后续点为J,计算矢量线段IJ右侧的所有点到IJ的距离,求出距离最大的点K。
③将K插入I、J之间,并将K赋给J。
④重复②、③步,直到点集中没有在线段IJ右侧的点为止。
⑤将J赋给I,J取其后续点,重复②、③、④步。
⑥当凸包中任意相邻两点连线的右侧不存在离散点时,结束点集凸包求取过程。
完成这一步后,形成了包含所有离散点的多边形(凸包)。
(2)环切边界法凸包三角剖分。在凸包链表中每次寻找一个由相邻两条凸包边组成的三角形,在该三角形的内部和边界上都不包含凸包上的任何其他点。将这个点去掉后得到新的凸包链表。重复这个过程,直到凸包链表中只剩下三个离散点为止。将凸包链表中的最后三个离散点构成一个三角形,结束凸包三角剖分过程。
完成这一步后,将凸包中的点构成了若干Delaunay三角形。
(3)离散点内插。在对凸包进行三角剖分之后,不在凸包上的其余离散点,可采用逐点内插的方法进行剖分。其基本过程为:
①找出外接圆包含待插入点的所有三角形,构成插入区域。
②删除插入区域内的三角形公共边,形成由三角形顶点构成的多边形。
③将插入点与多边形所有顶点相连,构成新的Delaunay三角形。
④重复①、②、③,直到所有非凸壳离散点都插入为止。
完成这一步,就完成了Delaunay三角网的构建。
2.2 渐次插入算法
(1)定义包含所有数据点的超三角形,初始三角形集合中只有超三角形;
(2)插入一点P到三角网中,找出P所在的三角形t;
(3)连接P与t的三个顶点,形成三个三角形;
(4)利用LOP法则更新生成的三角形;
(5)重复(2)到(4),直到所有的点插入结束;
(6)删除包含超三角形顶点的三角形。
此算法构建三角网结束结束。
对于算法中提到的LOP法则是指:最小角最大准则,即相邻两个Delaunay三角形构成凸四边形,在交换凸四边形的对角线之后,六个内角的最小者不再增大。
除上面描述的两种算法之外之外,构建Delaunay三角网还有其他很多算法,在此做简要说明。
分割归并法。Lee和Schachter较早提出了平面点集数据的Delaunay三角网的生成算法。其主要思想是把点集划分成两个相互独立的子集,然后分别生成一个子集的Delaunay三角网,最后将这两个子集合并。如果在由约束条件的情况下,Dywer 又把初始点集划分成垂直于X轴的窄带(多个而不是两个),而且这些窄带还将进一步被那些约束条件划分成更小的区域,然后分别将其生成Delaunay三角网,再采用Lawson的局部优化算法优化各个三角网,最后合并。
基础三角网增长法。Brassel和Reif1979年提出了该算法的主要思想。其思路是先找出点集中相距最短的两点连接成为一条Delaunay边,然后按Delaunay边三角网的判别法则找出包含此边的Delaunay三角形的另一端点。依次处理所有新生成的边,直至最终完成。
三、渐次插入算法的编程实现
3.1 结构设计:
(1)点数据结构:
class Dot
{
float x;//存放点的x坐标
float y;//存放点的y坐标
}
(2)三角形数据结构:
Class Triangle
{