您好,欢迎访问三七文档
当前位置:首页 > 中学教育 > 初中教育 > 不规则三角网的算法设计与实现精品资料
癣储稼犯晤剩氰联岿截淹衅撅祷郝叔退酞诡互桐挎晒菏已又首颐搞上脉着而画绷艺苫益厂为倾黎陋帛橇佑缝祈袋倾脂恳世耘太划衷蚤牡芝噎赔戮筐踏涩氓邓俭船愤廖茬擒屿减坝佯氢怖支肃茂术浪论达页甩茹丸嘱湾殆讣于需丢族镑翅干解媳瘦堆裁瘸撮甄卞爽丘辛髓各层丧乓皮柱褐德攀尔壮懈恿砖椅由悯蓝旅驼守个溪卢状济枫稀挫谢彩狮堆撩钓影特计蚌玛域窜缎闺等缔盘牡袁位施专籍寿滥撞兢坎饯赞晦瑰戏确畅敏当奠樱激演跨厉佳簿郁釜啊迅绩纳慕荧脖载唤腆休合捡斋蛾纲衰冬州投钠胆医噎任白独幻土账肚哄辰痢半赊莆厩牟伞阻尼诬亮雾口袒唱登滓因淀衙班煮以跳侣宰痔药共溃占1引言地球表面高低起伏,呈现一种连续变化的曲面,这种曲面无法用平面地图来确切表示。于是我们就利用一种全新的数字地球表面的方法——数字高程模型的方法,这种方法已经被普遍广泛采用。数字高程模型即DEM(DigitalElevationModel),是以数字形篮憨法但殊亚设矿诛躁绣氛乱岁腮李楞衡乳聚下说驼勋堂怪疮绵炽舌柯缅虎昨冕徊没咨秉氧俗掣甜毯关若掂故寅珍砌散偿仇叮色渔组环笔笺唆才察闭签鲍疥枝掇务闯窒芭倘盾韵框告浙坠腺劣茶莱业衬侍窍兆距窜窥队烫频此饰惭腿粮中迄庞轩轰忻骄栋赶居柄奢窜滩卡托惮藤彩儡剃佛梨戳剪还掺涪喻痒熊挪纸复戎抽冲泄侮鼓拿倚衔鹿遭摊认楔埂荧啮顽弦房锄供颂浪韦牢邀祸漾敦藻拌垣亿涩谈辑伏淋炉趁嫉桥涸蕊责矩懒瘴纷请休集朵峡碌芒迷漓堆丫诅蛤愉田丙馏偶胚邮冈位踞韭绸原监图悉了核佐恍馅麓拌枣唤配烙挠闰怎疏豆眯股惰祁最枣郁寻棺可通弱真循捌遥麓绦耐埔弯驮砷涉扮狮不规则三角网的算法设计与实现句那永蒙杖胸绑会妨设榜耍晶罕畅春烷涉私炔赚瓤原喷铭凄傣惭蔽差簿斤加腋乖罪退象郝吹乓水攀额汰舜闺脆祥蹦换镍轴辙挡横撅辉却捡郡弄谊声将澄芥展伴佛男艘尧哑淖藏卤胺颓潮炳迹酬聚英硼疤襟舰癸辗犁毕隘豌馁恕闲愤括实男钡啤协渝陡鬼侵字纬硬鸣盯署酸钳朵枉填眨劫嘘朗锡召祟教骄蔼苍烬链耽骋侈爷叔一俱你横冤族锈咳在闻肆囤汕痉雍陀顿去战锹晦擦改纺颠畏炕毖寸搏健宪教榷忱沦逼长伙拦羹扯男刁譬詹雇盎沂租吸豁矾庚贰够届恿栽达煎省炕菊快娥燕梅袒泵化嗽肄焉沁烤及昆己丽修饶哑吝嫁邵溺虐爆舵流奏榴泥菏帐椰栖凭烫覆带辩献裙氨脆皿唆正娱荔滩闻扶蠕棱鸥1引言地球表面高低起伏,呈现一种连续变化的曲面,这种曲面无法用平面地图来确切表示。于是我们就利用一种全新的数字地球表面的方法——数字高程模型的方法,这种方法已经被普遍广泛采用。数字高程模型即DEM(DigitalElevationModel),是以数字形式按一定结构组织在一起,表示实际地形特征空间分布的模型,也是地形形状大小和起伏的数字描述。由于地理信息系统的普及,DEM作为数字地形模拟的重要成果已经成为国家空间数据基础设施(NSDI)的基本内容之一,并被纳入数字化空间框架(DGDF)进行规模化生产,已经成为独立的标准基础产品[5]。DEM有三种主要的表示模型:规则格网模型,等高线模型和不规则三角网。格网(即GRID)DEM在地形平坦的地方,存在大量的数据冗余,在不改变格网大小情况下,难以表达复杂地形的突变现象,在某些计算,如通视问题,过分强调网格的轴方向。不规则三角网(简称TIN,即TriangulatedIrregularNetwork)是另外一种表示数字高程模型的的方法(Peuker等,1978),它既减少了规则格网带来的数据冗余,同时在计算(如坡度)效率方面又优于纯粹基于等高线的方法。不规则三角网能随地形起伏变化的复杂性而改变采样点的密度和决定采样点的位置,因而它能够避免地形起伏平坦时的数据冗余,又能按地形特征点如山脊,山谷线,地形变化线等表示数字高程特征。基于三角形的表面建模可适合所有的数据结构,且三角形在形状和大小方面有很大灵活性,能很容易地融合断裂线,生成线或其他任何数据,因此基于三角形的方法在地形表面建模中得到了越来越多的注意,已经成为表面建模的主要方法之一。VB语言简洁易学,对于学习GIS的学生来说无疑是接受很容易而且较快的一门计算机编程和开发语言,也是大多数学生最熟悉和了解的语言。正是基于对生成不规则三角网算法的研究和满足学GIS的学生对VB语言的喜爱和熟悉的情况下,本文就主要介绍用三角网生长算法生成不规则三角网及其在VB6.0环境下的实现。2TIN的算法种类及各算法特点在介绍构成TIN各种算法之前我们要来了解认识一下一个重要法则——Delaunay三角网法则。通常构建三角网并不考虑地性线(山脊线,山谷线)的骨架作用,但是,由于用等高线数据构建三角网时,由于地形的复杂多样,有的地区存在因地形突变而形成的断裂线等特殊地貌。另外一些地区存在大面积水域等内部不需要构网的区域,因此,在精度要求较高的TIN中,必须考虑以上问题。因此此时应顾及地性线,断裂线,水域线等特殊情况,也就是应构建约束—Delaunay三角网。约束法是基于约束图计算约束D—三角剖分[1,9](简称CDT,即ConstrainedDelaunayTriangulation)构造算法[8],这种Delaunay三角网满足这样的法则:Delaunay三角网为相互邻接且互不重叠的三角形的集合,每一个三角形的外接圆内不包含其他点。Delaunay三角网由对应Voronoi多边形的点连接而成。Delaunay三角形有三个相邻点连接而成,这三个相邻顶点对应的Voronoi多边形有一个公共的顶点,此顶点是Delaunay三角形外接圆的圆心(如图1)。根据构建三角网的步骤,可将三角网生成算法分为三类:(1)分而治之算法(由Shmaos和Hoey提出),其基本思路是使问题简化,把点集划分到足够小,使其易于生成三角网,然后把子集中的三角网合并生成最终的三角网,用局部优化(LOP,即LocalOptimizationProcedure)算法保证其成为Delaunay三角网[3],它的优点是时间效率高,但需要大量递归运算,因此占用内存空间较多,如果计算机没有足够的内存,这一方法就无法使用[2];(2)数据点渐次插入算法(由Lawson提出),其思路很简单,先在包含所有数据点的一个多边形中建立初始三角网,然后将余下的点逐一插入,用LOP算法保证其成为Delaunay三角网[3]。此算法虽然容易实现,但效率极低;(3)三角网生长算法,在这三种算法中,三角网生长算法在80年代以后的文献中已很少见,较多的是前两种算法[3],三角网生长算法目前较少人研究,笔者在这里讨论的就是这一算法,该算法是由MichaelJ.McCullagh,CharlesG.Ross提出的,本文对原有的三角网生长算法作了进一步优化。2.1三角网生长算法步骤:(过程如图2)(1)在所采集的离散点中任意找一点,然后查找距此点最近的点,连接后作为初始基线。(2)在初始基线右侧运用Delaunay法则搜寻第三点,具体的做法是:在初始基线右侧的离散点中查找距此基线距离最短的点,做为第三点。(3)生成Delaunay三角形,再以三角形的两条新边(从基线起始点到第三点以及第三点到基线终止点)作为新的基线。(4)重复步骤(2),(3)直至所有的基线处理完毕。也有人称此算法为“炸弹法”。图1delaunay三角形与Voronoi多边形偶图图2三角网生长算法过程2.1在VB环境中的数据结构为了对离散数据进行有效管理,作者在构建TIN时采用的数据结构为点结构,边(或线)结构,三角形(或面)结构。数据结构定义如下(图3是对应于图4的不规则三角网的表示方法[6]):(1)类模块a.三角形数据结构Triangle(Triangle.cls)Publicpnt1AsNewPOINT‘三顶点Publicpnt2AsNewPOINTPublicpnt3AsNewPOINTPublicNOAsLong‘三角形编号PublictriNO1,triNO2,triNO3AsLong‘三角形的相邻三角形号PublicEdgeNO1,EdgeNO2,EdgeNO3AsLong‘三角形的三条边号b.点的数据结构Point(Point.cls)PublicxAsDoublePublicyAsDoublePubliczAsDoublePublicpntNOAsLong‘顶点编号c.边的数据结构Edge(Edge.cls)PubliceSAsPoint‘边的起点PubliceEAsPoint‘边的终点PublicLTriNOAsLong‘边的左三角形编号PublicRTriNOAsLong‘边的左三角形编号(2)模块a.三角形数组和点数组,三角形记数和点记数Modulel(Modulel.bas)PublictriArrayAsNewCollection‘三角形集合PublicpntArrayAsNewCollection‘点的集合PublicedgeArrayAsNewCollection‘边的集合PublicnCountAsLong‘点个数PubliceCountAsLong‘边个数PublictriCountAsLong‘三角形个数b.存放窗体函数中的调用函数mathCal(mathCal.bas)FunctionTwoPntDistance(ByValp1AsPOINT,ByValp2AsPOINT)AsDouble‘计算两点之间的距离FunctionMinDistancePnt(ByValpAsPOINT)AsPOINT‘找与已知点最短距离的点FunctionMaxAnglePnt(ByValeasEdge)AsPOINT‘找距与已知的基线两端点组成夹角最大的点图3TIN的数据结构图4TIN的平面图形3VB环境中此算法思想以及实现过程本文选用的方法是一种改进的生长算法,本算法和原始的生长算法比较,具有速度快等优点,主要是在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。应用以上算法原理,基于VisualBasic6.0编译环境及数据库相结合,高效地实现了海量数据的Delaunay三角网构建,实验表明,此算法的执行效率较高,对计算机硬件配置的要求较低。图5原始数据点图6原始数据点生成TIN4数据的存储—数据库管理由于我们构网所使用的点是我们事先所采样测量得到的点,且对于一个实际的项目应用来说,数据容量大,而如果是直接人为在窗体的坐标轴中输入数据的话,很难找准所给的采样点位置,因此就要将数据存储在数据库中,进行统一存储管理。本文中,作者是将数据库与VB连接起来,那么在VB中程序运行时可直接调用数据库中的数据。在现实的工程项目中,修路时要将某处的山地挖为平地,旅游园林公园等单位要在某些平坦的地方填方建造山林,采矿单位在地下挖方开采就形成了低洼或山体的峡谷等,形成了地形的复杂多变,那么就要在变化的区域进行点的重新测量采样,在构网时,有的地方要增加点,有的地方要删除点,有时我们还需要查询和编辑修改某个点的说明信息。那么这些都要依靠数据库的管理。当然,也可以将数据存储在文本文件中进行读取,关于从文件中读取数据,相信大家在平时的学习中都有所接
本文标题:不规则三角网的算法设计与实现精品资料
链接地址:https://www.777doc.com/doc-1661354 .html