- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Delaunay算法在CAD中处理地形数据研究
Delaunay算法在CAD中处理地形数据研究
摘要:在道路和管道设计中,地形数据都是不可缺少的设计数据,其数据的准确性对于设计结果有着至关重要的影响。本文主要介绍如何在CAD的图形文件中获取测量点及高程数据,在C#语言环境中利用Delaunay算法将这些数据构建成三角网,并对可能出现的死循环或者重复点的情况进行算法改进,生成设计所需的测量数据文件。
关键词:Delaunay CAD 地形数据 三角网
中图分类号:TP391.72 文献标识码:A 文章编号:1007-9416(2013)01-0110-02
1 概述
在市政设计中,经常需要对CAD格式的地形测量文件进行数据提取,形成设计测量文件。但CAD中的测量散点分布一般都是离散的,如果不能用有效的算法来整合这些散点高程,获得不合实际的测量结果会给设计和工程量统计造成巨大误差,带来不可估量的损失。
Delaunay算法是由B.Delaunay在1934年根据二维平面的Voronoi图演化出来的,利用空圆特性和最大化最小角特性将空间中的有限点集剖分成一组三角形网格。经过实际证实,在一般情况下,Delaunay三角网是最优的。CAD中使用的测量文件中的散点完全符合Delaunay算法的数据要求,其中测量散点的X、Y坐标标记了其二维位置,标注内容为高程值。
根据Delaunay三角网的构建过程,其生成算法分为逐点插入法、分治法和三角网生成法。在此主要介绍逐点插入法,主要实现步骤为:(1)构建一个多边形凸壳,要将所有的测量散点包含在内;(2)从凸壳边界开始,以边界为三角形的边建立初始三角网;(3)根据Delaunay三角形特性,逐个将凸壳点以外的散点加入到三角网中。
以下对该算法的具体程序实现进行讲解和分析,使用的是C#语言。
2 数据获取及凸壳构建
CAD格式的地形文件中,常见的测量数据有点、圆和图块格式,带有高程数据标注,一般是在指定的地形图层中,这样便于查看和编辑。因此在获取数据时,首先要选择数据源格式及图层名称。由于设计时是按中线桩号沿线布置,获取的测量数据也要根据主线沿线计算,并定义扫描范围、起点桩号、桩号间隔和桩号走向等,其中扫描范围指沿中线向两侧有效点的半径,这样可以只获取指定范围??点,提高计算效率。
在程序实际计算时,发现有时会出现计算数据超出范围,后检查有时在地形图层中存在“混2”、“砖2”等标记建筑结构的字样,混淆了计算结果。因此可增加相应的有效高程值范围设置,规定超过此范围的散点认为是无效的。将获取的散点集合做成结构体,对x、y、z坐标、每个点的ID做标记,并且每个点做凸壳标记,方便生成凸壳。对所有散点做对比检查,有相同x、y坐标的点要进行删除,否则后期计算高程会有误差产生。同时对点构成的边、三角形也做成相应结构体,标记索引记号,在构建网格时使用。
建立凸壳目标是要将所有点包含在内,在此采用x-y及x+y值的最大、最小点,形成一个四边形,加入到凸壳集合中,并做凸壳标记。依次循环对余下的散点做计算,若有点在已有点组成的直线外侧则修改凸壳,将点加入凸壳链表,并判断添加后是否出现内凹,若出现则删除内凹点。同时做循环,将加入凸壳的点从散点集合中移除并做标记,图1中为一组地形测试数据构成的凸壳图形。此时再对凸壳进行三角剖分,依次对凸壳顶点判断,每次取3个点,若其构成的三角形外接圆中不包含其他凸壳端点,则标记此三角形,将其加入到三角形网的集合中,并对中间的端点做已构成三角形网格记号,循环至剩余点小于3个(图1)。
3 三角网生成
凸壳及其初始三角剖分后要对余下的散点进行逐点加入,循环时对三角形集合中所有三角形进行计算。若当前点在某个三角形的外接圆内,则在集合中删除该三角形,同时将该三角形的非公共边的边线存储到边集合中。在该点对所有三角形循环结束后,再对边集合中的所有边与该点构成三角形加到三角形集合中,过程如(图2)所示。
三角形集合的端点包含了所有的散点后要对边做相应的拓扑关系。遍历每个三角形的三条边线,若集合中不存在相同端点的边,加入边的集合,并标记其所属的三角形关系,在后面计算点高程的时候要使用到,最终形成的三角形网格如(图3)所示。
4 地形数据的计算
根据初始时获取的中线及桩号间隔可在主线上获取中线测量点,可让用户自定义左右侧横断面点个数及横向间隔,获得标准格式的测量端点,再对个别测量点偏距进行定义,生成测量点文件,包含每个待测点的x及y值。
使用三角形网格计算高程的前提是默认每个三角形都是在同一个平面上,依据待测点的xy坐标在三角形集合中判断是在哪一个三角形内。可使用面积法判断,即用查询点和三角形的三条边构成三个三角形,求面积只和,若与原三角形的面积相
文档评论(0)