建TIN的几种算法比较

建TIN的几种算法比较


2023年12月22日发(作者:vivoiqooneo5参数)

2011年第12期 总第162期 福 建 建 筑 No12・2011 Fujian Architecture&Construction Vo1.162 建TIN的几种算法比较 陈素 (福州市勘测院福建福州350003) 摘 要:TIN是由三角形构成的一种有限元网格,它主要用来表示地形或地物表面。本文从几种不同建TIN的算法(三角网生长 算法、凸壳算法、前沿边推进算法和贪心算法)来比较和分析各算法的优缺点。 关键词:TIN三角网生长算法 凸壳算法前沿边推进算法贪心算法 中图分类号:EP258] 文献标识码:B 文章编号:1004--6135(2011)12一O1o2一O3 The construction of TIN algorithms comparison Chen Su (Fuzhou investigation and surveying institute Fuzhou 350003) Abstract:TIN is constituted by the triangle a finite element mesh,which is mainly used tO express topography Or terrain surface. This paper from several different TIN algorithm(triangulation network growth algorithm。convex hull algorithm。front edge push algorithm and greedy algorithm)tO compare and analyze the advantages and shortcomings of different algoritms.h Keywords:TIN Triangulation network growth algorithm Convex hull algorithm Algorithm Greedy algorithm of advancing front edge 1 TIN模型概念 不规则三角网是按一定的规则将离散点连接成覆盖整个 壳,然后相邻凸壳进行三角剖分并优化。其基本过程为: ①求出数据中的所有凸壳顶点; ②从内到外,对相邻的凸壳进行三角连接,直到最外一个 凸壳为止; 区域且互不重叠、结构最佳的三角形,实际上是建立离散点之 间的空间关系。每个三角平面表示地形面的一部分,三角形的 形状和大小取决于不规则分布的高程数据点的位置和密度。 通常情况下,采样点应尽量均匀分布,但地形面转折处的点(如 山峰、山脊、沟槽和峡谷)一定要测到位,否则就无法表示出准 确的地形表面特征。 ③对三角形进行排序,从第一个三角形开始,对其各边有 公共边的三角进行优化,直到最后一个三角形。 (3)前沿边推进算法 前沿边推进算法的基本思想是以包括所有凸壳的每一条 边作为新生成的三角形的边,向凸壳内“推进”,找到满足 Delaunay构网法则的点,直到最后一个凸壳(或一个点、或两个 点)。其基本过程为: ①对平面中的所有点找出最外层凸壳; ②以最外层凸壳的每条边向内寻找距离该条边最近的点, 2建立TIN的几种算法简述 建立TIN的算法有很多种,如常用的不规则三角网算法 有Delaunay三角剖分法、径向扫描法、区域生成法、逐点插入 法、三角网生长算法、分治算法、凸壳算法、前沿边推进算法和 贪心算法等。这里仅以三角网生长法、凸壳算法、前沿边推进 算法和贪心算法四种算法简述如下。 (1)三角网生长算法 三角网生长算法是由Brassel和Reif在1979年提出的,该 算法是从任意一点开始,在一维排序链表中以循环搜索方式查 组成新的三角形并存储下来; ③以新找出的点组成凸凹壳,重复②步,直到最后一个凸 凹壳(一个点或两个点另外处理)。 (4)贪心算法 出此任意点的泰森邻域点。其基本过程为: ①在数据中取任意一点,查找距离此点最近的点,相连后 作为初始基线; 贪心算法是凸壳算法和三角网生长算法相结合构成的。 其基本过程为: ①对平面中所有坐标求出最外层凸壳,将凸壳点一一 记录下来; .②计算此基线的中点平面坐标,以此点查找距离它最近的 点并作为第三点生成第一个三角形; ②除去最外层凸壳点,在平面内找任意一点,找出与它距 离最近的点; ③以三角形的三边作为新的基线向外扩展,并对三角形的 每条边计数,任意相同一条边最多可以使用两次; ④重复过程②、③步直至所有基线处理完毕。 (2)凸壳算法 凸壳算法是对平面中的所有离散点从外到内找出每个凸 作者简介:陈素,女,1977年5月出生,助工。 收稿日期:2Oll—l1一O7 ③求这两点的中点,找出与中点距离最近的点,将这三点 归为第一个三角形;  .④以第一个三角形的三边作为扩展边向外扩展,直到每条 边都用了两次为止(最外层凸壳除外)。 3 TIN的数据结构 建立不规则三角网数字高程模型,首先要存贮每个点x、 Y、z三维坐标,然后要存贮网点连接的拓扑关系、三角形及邻 接三角形等信息。常用的不规则三角网存贮结构为直接表示 三角形及邻接关系的结构。如表1、表2、表3所示: 

2011年12期总第162期 2 1 2 3 4 5 色 2 6 3 5 ~ ¨ . ¨ . ¨ . 陈素-建TIN的几种算法比较 维塞髹囊号、 表2三角形表 表3邻接三角形表 1 乱 ①第一步,对平面所有点求凸壳并找出各凸壳之间所有的 三角形。 3 1 5 3 No X Y Z 2 3  PzNo PI Pa & 色 色 5 1 4 No AI △2 Aa j一2 对第一圈第二点开始 450:For i一1 To ItemCount 从其余点中找下一点 H(PointlD(i)<>Dell(Q,j))And(PointlD(i)<> Dell(Q,(j一1)))Then 1 2 3 4 5 ¨ 弘 一 ’计算三角形的三边长aaL、bbL和ccL,分为角度大于9O。 0 ∞ ~ 0 似 ~ 1 2 3 4 5 ¨ 这种数据结构由离散点三维坐标、三角形及邻接三角形等 三个表构成,每个三角形都作为数据记录直接存贮,并用指向 弘 一 三角离散点的编号来表示。三角形中三边相邻的三角都作为 他 ∞ ~ 数据记录直接存储,并用指向相应的三角形的编号来表示。 这种数据结构最早由Gol0 弘 踮 d,McCullahh及Tar一 vydas等人提出 并使用,其最大特点是检索网点拓扑关系效率高,便于等高 线内插、TIN快速显示与局部结构分析,但其缺点是数据存 贮量较大。 4建立TIN的几种算法比较及实例演示 三角网生长算法的优点是所建立的不规则三角网是直接 进行的最大优化的,但该算法大部分的计算时间都花费在基于 给定基线在大量数据点中搜寻符合要求的邻域点上。所以该 算法的最大缺陷是在大数据量建TIN时速度会非常缓慢。 凸壳算法的优点是对大数据量建TIN时速度非常快,由 于在本算法中将建TIN过程分成求所有凸壳、相邻凸壳进行 三角形连接和优化三个步骤,所以将算法中的循环层次降低 了,其缺陷是不规则三角网的优化过程较为复杂,想达到每个 三角形最优是非常困难的。 前沿边推进算法和贪心算法都是一种非常优秀的算法,它 不仅结合了凸壳算法中的优点,而且还结合了三角网生长算法 的优点。两种算法所耗的时间介于三角网生长算法和凸壳算 法之间。 下面分别就四种算法示例演示如下(数据文件格式为文 本格式): (1)三角网生长算法的部分代码如下: Dim xMin As Single,yMin As Single,xMax As Single, yMax As Single‘定义x、Y的最大值和最小值; Dim Verl()As Integer,Ver2()As Integer,Ver3()As Integer定义存放三角形的三个点集; Dim X()As Single,Y()As Single,Z()As Single 定义 打开文件中的x、Y、z三个点集。 其建立的TIN结果如图1所示: 图1三角网生长算法建TIN (2)凸壳算法部分代码算法如下: 或小于90。两种情况 If(aaL+ccL~bbL<一O)Then 角度大于9O。 ‘找出新的凸壳点 nn3一PointID(i)‘记录下此点 End If If(aaL+ecL—bbL<=O)Then’角度小于9O。 ‘找出新的凸壳点 nn3=PointID(i)‘记录下此点 End If End If If nn3=nnl Then’判断是否找完一圈点 Tri—Tri一1 DelDataNumber(Q,1)一Tri’记录每一圈凸壳点个数 If ItemCount—Tri一1 Then Exit Sub判断是否只有一 个凸壳圈 Else Call DelPointCir(Q) ’ End H Else Tfi—Tfi+1 j—j+1‘凸壳包内的数据点-'i' ̄JJn 1 PAnglemax=1 GoTo 450跳到上面重新执行程序,求出新的凸壳点 End If 其建立的TIN结果如图2所示(优化过程代码略): 图3凸壳算法(优化) (3)前沿边推进算法部分代码如下: 求出平面中所有点的最外层凸壳,以最外层凸壳的每条边 向内推进。 For j一1 To ItemCount‘在平面中应用Delaunay构网法 则求出每一个三角形的第三点 

2011年12期总第162期 陈素・建TIN的几种算法比较 TriExtend(k) ・104・ If((j<>EIel1(Q,i))And(j<>Del1(Q,i+1))) Then 45:j1一j1+1 If 1一k Then GoTo 45 aaL一(DeIX(Q,i)一X(j)) 2+(DelY(Q,i)一Y (i)) 2 If(((Verl(k):Ver1(j1))0r(ver1(k)一Ver2(j1))Or(ver1 bbL一(De1X(Q,i+1)一xq)) 2+(De1Y(Q,i+ 1)一Y(j))‘2 (k)一Ver3(j1)))And(((Ver3(k)=Ver1(ji))Or(Ver3(k)一 Ver2(j1))Or(Ver3(k)一、 r3(j1)))))Then GoTo 50 If j1<1 Then GoTo 45 nl—ver1(k):n2一Ver3(k):n3一Ver2(k):Call ccL=(DelX(Q,i+1)一DelX(1,i)) 2+(De1Y(Q, i+1)一DelY(Q,i)) 2 COSC一1一(aaL+bbL—ccL)/(2 bbL)) Sar(aaL* TriExtend(’k) 5O:j2一j2+1 If 2一k Then GoTo 50 If COSC>ttThen tt=COSC k=j‘找出第三角点为 最大角度的三角形 End If End If Nextj 图4第一圈凸壳边找出的三角形 图5经凸凹壳向内推进并优化后的TIN (4)贪心算法的部分代码如下: 三角形的扩展 k一1‘对三角形各边定权为1,第一个三角形向外扩展 TriExtend(k) nl—Ver2(k):n2=Ver3(k):n3一V盯1(k):Cal1 TriExtend(k) 20:k=k+1‘第二个至最后一个三角形的扩展 4O:j—J+1 If —kThenGoTo 40 If(((Verl(k)=Verl(j))Or(Verl(k):Ver2(j))Or (Verl(k)一Ver3(j)))And(((Ver2(k):Verl(j))Or (Ver2(k)一Ver2(j))Or(Ver2(k)=Ver3(j)))))Then Go— T0 45 If i<1 Than GoTo 40 nl—Verl(k):n2:ver2(k):n3一Ver3(k):Call If(((Ver2(k)一Verl(j2))Or(Ver2(k)=Ver2(j2))Or (Ver2(k)一ver3(j2)))And(((Ver3(k):Vet1(j2))Or (Ver3(k)=Ver2(j2))Or(Ver3(k)=Ver3(j2)))))Then GoTo 25 fi2<lThenGoTo 50 55:nl—Ver2(k):n2一Ver3(k):n3:Verl(k):Call TriExtend(k) 25:If k<l Then GoTo 20 图6用贪心算法先求出最外层凸壳 不规则三角网TIN是一种重要的数字高程模型,特别是 在顾及地形线特征的条件下,具有很高的精度和逼真度。本文 从四种建TIN的基本思路和算法着手,依次用VB6语言将其 一一实现。在编程过程中除了参考有关书籍的算法外,另对有 些算法作了进一步改进和优化,特别是如何尽可能减少存储空 间,如何加快计算速度方面。但对提高显示地形的精度和用 TIN模型逼真显示地形地物等问题还需进一步研究。 参考文献 [1]王来生,鞠时光,郭铁雄,等.大比例尺地形图机助绘图算法 及程序[M].北京:测绘出版社,1993. [2]周培德.计算几何一算法分析与设计[M].北京:清华大学出 版社,2000. [3]王家耀.空间信息系统原理[M].北京:科学出版社,2001. 


发布者:admin,转转请注明出处:http://www.yc00.com/num/1703207112a1283944.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信