不规则三角网的算法设计与实现10页word文档
- 格式:doc
- 大小:27.00 KB
- 文档页数:10
摘要作为空间数据基础设施中的“4D”产品之一和地理信息系统的核心数据库,数字高程模型(DEM)已在测绘、遥感、农林规划、城市规划、土木水利工程、地学分析等各个领域都有了广泛的应用。
数字高程模型的表示方法主要有规则格网模型、不规则三角网模型和等高线模型三种,而不规则三角网(TIN)是数字高程模型中最基本和最重要的一种模型,它能以不同层次的分辨率来描述地形表面,并可以灵活的处理特殊地形。
因此,围绕基于TIN 的DEM 的构建,本文主要论述了基于 TIN 结构的数字高程模型建模原理和方法,离散点的Delaunay 三角网生成算法,建立有约束条件的约束三角网,最后分析了建立的 TIN模型在土方计算方面的应用。
在本论文论述的过程中,针对传统算法进行了对比和分析后,在逐点插入法的基础之上,提出了一些新的细部改进的实现方法。
局部优化操作和改进的算法实现使得对大容量离散点的三角网构建速度更快,效率更高;对限制条件的嵌入满足由此计算出来的土方量更接近实际期望值。
本论文中主要的研究成果和内容如下: 1)在离散点的 Delaunay 三角网生成方面,本文中在插入点算法的基础上,建立凸包和矩形包容盒,建立虚拟网格,对原始离散点进行一级格网自适应分块,并建立索引关系。
在定位点所在三角形时引入快速点定位算法,简易的空外接圆及圆内测试公式,通过这些改进使得 Delaunay 三角网的剖分更加高效。
2)在约束 Delaunay 三角网理论基础之上,结合上面散点域的剖分方法,对已有的两步算法基础上改进,完成约束 Delaunay 三角网的构建。
在其过程中应用矢量点积等数学工具改善了计算中的凹凸点判断,继续采用上章的快速索引和最速定位方法,并且对约束线相切等特殊情形进行了处理,进一步完善了算法的稳健性。
3)对于在约束三角网构造基础上的 TIN 模型的应用,文中对其在土方量计算方面精度的优越性进行了分析,在可视化表达方面最后结合广东省东莞市某高尔夫球场工程给出了例证。
不规则三角网(TIN)生成的算法第五章不规则三角网(TIN)生成的算法在第四章,基于三角网和格网的建模方法使用较多,被认为是两种基本的建模方法。
三角网被视为最基本的一种网络,它既可适应规则分布数据,也可适应不规则分布数据,即可通过对三角网的内插生成规则格网网络,也可根据三角网直接建立连续或光滑表面模型。
在第四章中同时也介绍了Delaunay 三角网的基本概念及其产生原理,并将三角网构网算法归纳为两大类:即静态三角网和动态三角网。
由于增量式动态构网方法在形成Delaunay 三角网的同时具有很高的计算效率而被普遍采用。
本章主要介绍静态方法中典型的三角网生长算法和动态方法中的数据点逐点插入算法;同时,还将给出考虑地形特征线和其他约束线段的插入算法。
而其他非Delaunay 三角网算法如辐射扫描法Radial Sweep Algorigthm(Mirante & Weingarten, 1982)等本文将不再介绍。
5.1 三角网生长法5.1.1 递归生长法递归生长算法的基本过程为如图 5.1.1 所示:3 213 21(a)形成第一个三角形(b) 扩展生成第二个和第三个三角形图5.1.1 递归生长法构建 Delaunay 三角网(1)在所有数据中取任意一点1(一般从几何中心附近开始),查找1距离此点最近的点 2,相连后作为初始基线 1-2;(2)在初始基线右边应用 Delaunay 法则搜寻第三点 3,形成第一个Delaunay 三角形;(3)并以此三角形的两条新边(2-3,3-1)作为新的初始基线;(4)重复步骤(2)和(3)直至所有数据点处理完毕。
该算法主要的工作是在大量数据点中搜寻给定基线符合要求的邻域点。
一种比较简单的搜索方法是通过计算三角形外接圆的圆心和半径来完成对邻域点的搜索。
为减少搜索时间,还可以预先将数据按 X 或 Y 坐标分块并进行排序。
使用外接圆的搜索方法限定了基线的待选邻域点,因而降低了用于搜寻Delaunay 三角网的计算时间。
第一章绪论1.1研究背景地球是人类生活和活动的承载体。
多年以来,我们为了更充分的认识自然客体和改造自然,总在不懈的努力尝试用不同的方式方法来描述、表达人所处的环境,其中地形图就是一个有代表性的测绘表述变迁的缩影。
从最开始的象形符号抽象的雏形到后来的在二维介质上对三维表面进行地形写景图,地貌写景图等描述是一个进步,但写景方式不具备可量测性,所以还是很局限的。
随着测绘技术发展,地形的表达也由写景式的定性表达过渡到了以等高线为主的矢量化表达。
航空摄影测量,遥感技术提供的影响都在对三维现实世界的模拟。
但是有一个矛盾体,那就是对于地形表面形态而言,一方面我们尽可能的从几何角度去理解和描述以解决实际应用中的可量测性;另外一个方面它本身是一种三维景观现象,对于其表述要考虑生理视觉感受,我们总是希望能够尽可能的直观形象逼真。
从20世纪四十年代开始的计算机图形学、计算机辅助制图等相关学科和理论的发展,使得在测绘领域,在图形表达表述方面发生了从模拟表达时代走向了数字表达时代,有了质的飞跃。
其中地理信息系统(GIS )及数字高程模型(DEM )学科或技术显得尤为重要。
地理信息系统,简称GIS (Geographical Information System ),它源于20世纪60年代初期加拿大测量学家Tomlinson 的“把地图变成数字形式的地图,以便计算机进行处理与分析”的观点,但是在技术工具处理中,则是利用计算机存贮、处理地理信息,并且在计算机软、硬件支持下,把各种资源信息和环境参数按空间分布或地理坐标,以一定的格式或者分类输入、处理、存贮、输出,用以满足其应用需要的人机交互系统。
因此GIS 的本质是在二维地理空间基础上实现对地下、地表和空中诸地理信息的数字化表达和管理。
当然地理信息系统技术发展到当前,功能不再是当初的局限于查询、检索和制图,而是丰富到空间分析、建模、决策等诸多方面,在数据管理上则从简单的栅格数据、矢量数据管理转向多元数据融合,在现实生活中应用的很活跃,也很充分。
不规则三角网(TIN )生成算法一、三角剖分的标准:空外接圆法:任意四点不能共圆最大最小角法:三角网内的最小角尽可能的大最短距离和准则:形成的三角形三边之和应满足最优解——三边之和最短张角最大准则:面积比准则: 三角形的内切圆面积/三角形面积或三角形面积/三角形周长的平方的值最小对角线法则:但插入另一个点时,寻找四边形对角线最短的那条边作为新的三角网二、Delaunay 符合的标准:三、递归生长算法的基本思路:四、凸闭包收缩法:先找到包含数据区域的最小凸多边形,并从该多边形开始从外向里逐层形成三角形网络五、逐点插入法生成TIN 的思路:首先提取整个数据区域的最小外边界矩形范围,以此作为最简单的凸闭包->按一定法则将数据区域的矩形范围进行格网划分,限定每个格网单元平均拥有的数据点数->根据数据点的(x,y )坐标建立分块索引的线性链表->剖分数据区域的凸闭包形成两个超多边形->按照3建立的顺序链表顺序往4的三角形中插入数据点:先找到包含数据点的三角形,进而连接该点与三角形的三个顶点,简单剖分该三角形为三个新的三角形->分别调整新生成的三个三角形及其相邻的三角形,交换公共边->重复5~6,直到所有数据点都被插入到三角网中六、三角网TIN数据类型:无约束数据域——无约束TIN 约束数据域:内部约束及外部约束七delaunay法则:当三角形外接圆内不包含任意其他点,且其三个顶点相互通视时形成的三角网为一个带约束条件的delaunay法三角形八、带约束条件的delaunay Lawson LOP交换:在带约束的delaunay法则满足的条件下,由两相邻三角形组成的凸四边形的局部最佳对角线才被选取九、在TIN生成中如何考虑地形特征线三角剖分时要求TIN三角网中得三角形满足形态最优和无地形线穿越三角形的要求,主要有:三角形初始剖分->判断剖分三角形是否满足三角形形态比最大原则->判断特征线是否穿越剖分三角形->剖分点选择。
不规则三角网的原理和应用1. 引言不规则三角网是一种在地理信息系统(GIS)和计算机图形学中常用的数据结构,用于表示地形、地貌和其他空间数据。
本文将介绍不规则三角网的原理和应用。
2. 不规则三角网的原理不规则三角网是由一组不重叠的三角形组成的网络,其中每个三角形的边都共享一条边。
它可以用于将二维或三维空间上的数据进行离散化表示。
以下是建立不规则三角网的基本原理:•节点选择:首先需要选择一组合适的节点来构建三角网。
节点可以是地理位置、数据采集点或其他感兴趣的位置。
这些节点将成为三角网的顶点。
•三角剖分:根据节点的位置,在节点之间进行三角形的剖分。
通常使用Delaunay三角剖分方法,保证所有三角形的内接圆不包含其他节点,这样可以避免形成过于细长或扭曲的三角形。
•节点连接:将每个三角形的顶点连接起来形成三角网。
每个三角形的边都共享一条边,这样可以保证三角网的连续性。
3. 不规则三角网的应用不规则三角网在地理信息系统和计算机图形学中有广泛的应用。
以下是几个常见的应用场景:3.1 地形分析不规则三角网可以用于对地形进行离散化表示和分析。
通过节点的高程信息,可以计算每个三角形的面积、坡度和曲率等地形属性。
这对于地质学、测绘学和环境科学等领域的地形分析非常重要。
3.2 地理可视化不规则三角网可以用于地理可视化,将地理数据以更直观的方式呈现出来。
通过对三角形进行插值,可以根据节点上的数据对整个区域进行表面重建,从而生成地形模型或地图。
这对于城市规划、区域分析和地理导航等应用非常有用。
3.3 网格生成在计算机图形学中,不规则三角网可以用于网格生成。
根据给定的节点,可以通过插值方法生成一系列网格点,用于绘制曲线、表面或其他图形。
这对于计算机辅助设计、虚拟现实和游戏开发等领域非常重要。
3.4 数据插值不规则三角网可以用于数据插值,将离散的数据点进行填充。
通过插值方法,可以根据已知节点的属性估计其他位置的属性。
这对于气象学、地质学和农业等领域的数据分析非常有用。
1 引言地球表面高低起伏,呈现一种连续变化的曲面,这种曲面无法用平面地图来确切表示。
于是我们就利用一种全新的数字地球表面的方法——数字高程模型的方法,这种方法已经被普遍广泛采用。
数字高程模型即DEM (Digital Elevation Model),是以数字形式按一定结构组织在一起,表示实际地形特征空间分布的模型,也是地形形状大小和起伏的数字描述。
由于地理信息系统的普及,DEM作为数字地形模拟的重要成果已经成为国家空间数据基础设施(NSDI)的基本内容之一,并被纳入数字化空间框架(DGDF)进行规模化生产,已经成为独立的标准基础产品[5]。
DEM有三种主要的表示模型:规则格网模型,等高线模型和不规则三角网。
格网(即GRID)DEM在地形平坦的地方,存在大量的数据冗余,在不改变格网大小情况下,难以表达复杂地形的突变现象,在某些计算,如通视问题,过分强调网格的轴方向。
不规则三角网(简称TIN,即Triangulated Irregular Network)是另外一种表示数字高程模型的的方法(Peuker等,1978),它既减少了规则格网带来的数据冗余,同时在计算(如坡度)效率方面又优于纯粹基于等高线的方法。
不规则三角网能随地形起伏变化的复杂性而改变采样点的密度和决定采样点的位置,因而它能够避免地形起伏平坦时的数据冗余,又能按地形特征点如山脊,山谷线,地形变化线等表示数字高程特征。
基于三角形的表面建模可适合所有的数据结构,且三角形在形状和大小方面有很大灵活性,能很容易地融合断裂线,生成线或其他任何数据,因此基于三角形的方法在地形表面建模中得到了越来越多的注意,已经成为表面建模的主要方法之一。
VB语言简洁易学,对于学习GIS的学生来说无疑是接受很容易而且较快的一门计算机编程和开发语言,也是大多数学生最熟悉和了解的语言。
正是基于对生成不规则三角网算法的研究和满足学GIS的学生对VB语言的喜爱和熟悉的情况下,本文就主要介绍用三角网生长算法生成不规则三角网及其在VB6.0环境下的实现。
2 TIN的算法种类及各算法特点在介绍构成TIN各种算法之前我们要来了解认识一下一个重要法则——Delaunay三角网法则。
通常构建三角网并不考虑地性线(山脊线,山谷线)的骨架作用,但是,由于用等高线数据构建三角网时,由于地形的复杂多样,有的地区存在因地形突变而形成的断裂线等特殊地貌。
另外一些地区存在大面积水域等内部不需要构网的区域,因此,在精度要求较高的TIN中,必须考虑以上问题。
因此此时应顾及地性线,断裂线,水域线等特殊情况,也就是应构建约束—Delaunay三角网。
约束法是基于约束图计算约束D—三角剖分[1,9](简称CDT,即Constrained Delaunay Triangulation)构造算法[8],这种Delaunay三角网满足这样的法则:Delaunay三角网为相互邻接且互不重叠的三角形的集合,每一个三角形的外接圆内不包含其他点。
Delaunay三角网由对应Voronoi多边形的点连接而成。
Delaunay三角形有三个相邻点连接而成,这三个相邻顶点对应的Voronoi多边形有一个公共的顶点,此顶点是Delaunay三角形外接圆的圆心(如图1)。
根据构建三角网的步骤,可将三角网生成算法分为三类:(1)分而治之算法(由Shmaos和Hoey提出),其基本思路是使问题简化,把点集划分到足够小,使其易于生成三角网,然后把子集中的三角网合并生成最终的三角网,用局部优化(LOP,即Local Optimization Procedure)算法保证其成为Delaunay三角网[3],它的优点是时间效率高,但需要大量递归运算,因此占用内存空间较多,如果计算机没有足够的内存,这一方法就无法使用[2];(2)数据点渐次插入算法(由Lawson提出),其思路很简单,先在包含所有数据点的一个多边形中建立初始三角网,然后将余下的点逐一插入,用LOP算法保证其成为Delaunay三角网[3]。
此算法虽然容易实现,但效率极低;(3)三角网生长算法,在这三种算法中,三角网生长算法在80年代以后的文献中已很少见,较多的是前两种算法[3],三角网生长算法目前较少人研究,笔者在这里讨论的就是这一算法,该算法是由Michael J.McCullagh,Charles G.Ross提出的,本文对原有的三角网生长算法作了进一步优化。
2.1 三角网生长算法步骤:(过程如图2)(1)在所采集的离散点中任意找一点,然后查找距此点最近的点,连接后作为初始基线。
(2)在初始基线右侧运用Delaunay法则搜寻第三点,具体的做法是:在初始基线右侧的离散点中查找距此基线距离最短的点,做为第三点。
(3)生成Delaunay三角形,再以三角形的两条新边(从基线起始点到第三点以及第三点到基线终止点)作为新的基线。
(4)重复步骤(2),(3)直至所有的基线处理完毕。
也有人称此算法为“炸弹法”。
图1 delaunay三角形与Voronoi多边形偶图图2 三角网生长算法过程2.1 在VB环境中的数据结构为了对离散数据进行有效管理,作者在构建TIN时采用的数据结构为点结构,边(或线)结构,三角形(或面)结构。
数据结构定义如下(图3是对应于图4的不规则三角网的表示方法[6]):(1)类模块a.三角形数据结构Triangle(Triangle.cls)Public pnt1 As New POINT ‘三顶点Public pnt2 As New POINTPublic pnt3 As New POINTPublic NO AsLong ‘三角形编号Public triNO1, triNO2, triNO3 As Long ‘三角形的相邻三角形号Public EdgeNO1, EdgeNO2, EdgeNO3As Long ‘三角形的三条边号b.点的数据结构Point(Point.cls)Public x As DoublePublic y As DoublePublic z As DoublePublic pntNO AsLong ‘顶点编号c.边的数据结构Edge(Edge.cls)Public eS As Point ‘边的起点Public eE As Point ‘边的终点Public LTriNO As Long ‘边的左三角形编号Public RTriNO As Long ‘边的左三角形编号(2) 模块a. 三角形数组和点数组,三角形记数和点记数Modulel(Modulel.bas)Public triArray As New Collection ‘三角形集合Public pntArray As New Collection ‘点的集合Public edgeArray As New Collection ‘边的集合Public nCount As Long ‘点个数Public eCount As Long ‘边个数Public triCount As Long ‘三角形个数b. 存放窗体函数中的调用函数mathCal(mathCal.bas)Function TwoPntDistance(ByVal p1 As POINT, ByVal p2 As POINT) As Double ‘计算两点之间的距离Function MinDistancePnt(ByVal p As POINT) As POINT ‘找与已知点最短距离的点Function MaxAnglePnt(ByVal e as Edge) As POINT ‘找距与已知的基线两端点组成夹角最大的点图 3 TIN的数据结构图 4 TIN的平面图形3 VB环境中此算法思想以及实现过程本文选用的方法是一种改进的生长算法,本算法和原始的生长算法比较,具有速度快等优点,主要是在Edge边数据结构中加入了边的使用次数,这样就没有必要对每个新生成的三角形的两条新边都向外扩展生长,有效地减少了扩展的边个数,从而提高了构网速度,本算法的详细如下。
(1) 在离散数据点集V中任取一点A ,以点A为基点寻找与它最近的一点B。
连接AB ,就得到了三角形的一条基边,把该边作为扩展基边,转(2) 。
(2) 在扩展基边(是有向的)的右边点集中去找与该边两端点连成直线组成的夹角为最大的P点,就组成了第一个三角形,将所有新生成的边与三角形信息用相应的链表进行存储起来,边每使用一次,其数据结构中的UseTimes就加1,转(3) 。
(3) 在边链表中取出头位置的边,以该边为扩展基边向外进行扩展。
如果该边的使用次数为2或是右边没有点,该边不进行扩展;否则,转( 2)进行扩展,同时存储新生成的边和三角形。
转(4)。
(4) 对边链表中下一位置的边进行扩展,实现过程同步骤(3) ,转(5)。
(5) 重复步骤( 4) ,直至边链表中的所有边都进行了扩展,就结束构网。
为了对算法的稳定性及可行性进行检验,笔者在VB中实现了上述算法,并用一些实验数据点验证了上述算法,图5是原始的数据点,图6是用该算法实现TIN。
应用以上算法原理,基于Visual Basic 6.0 编译环境及数据库相结合,高效地实现了海量数据的Delaunay 三角网构建,实验表明,此算法的执行效率较高,对计算机硬件配置的要求较低。
图5 原始数据点图6 原始数据点生成TIN4 数据的存储—数据库管理由于我们构网所使用的点是我们事先所采样测量得到的点,且对于一个实际的项目应用来说,数据容量大,而如果是直接人为在窗体的坐标轴中输入数据的话,很难找准所给的采样点位置,因此就要将数据存储在数据库中,进行统一存储管理。
本文中,作者是将数据库与VB连接起来,那么在VB中程序运行时可直接调用数据库中的数据。
在现实的工程项目中,修路时要将某处的山地挖为平地,旅游园林公园等单位要在某些平坦的地方填方建造山林,采矿单位在地下挖方开采就形成了低洼或山体的峡谷等,形成了地形的复杂多变,那么就要在变化的区域进行点的重新测量采样,在构网时,有的地方要增加点,有的地方要删除点,有时我们还需要查询和编辑修改某个点的说明信息。
那么这些都要依靠数据库的管理。
当然,也可以将数据存储在文本文件中进行读取,关于从文件中读取数据,相信大家在平时的学习中都有所接触,这里不再赘述。
本文空间数据的操作包括图形的显示,放大,缩小,漫游,编辑,拓扑建立,查询和分析。
5 改进和提高数据放在数据库(内存)里,再从内存中读取数据,这比直接从硬盘上读取数据快的多,但是,若数据量很大,Windows就要频繁地在内存和硬盘之间交换数据,反而影响速度,这种方法对硬件的依赖很大,并未从根本上解决问题[4,7]。