- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于AutoCAD VBA等值线生成与平滑
基于AutoCAD VBA等值线生成与平滑
[摘 要] AutoCAD是一直世界上最流行的绘图软件之一,其强大的二次开发功能,可以解决很多现实中的问题。在AutoCAD VBA二次开发平台上,结合TIN三角网的自动生成原理,以及计算机图形学中曲线平滑原理,选择适合的平滑函数,最终便可以得到平滑的等值线图。
[关键词] 等值线 TIN LOP 等值线追踪 平滑处理
1、关于AutoCADVBA
随着AutoCAD的日益普及,在其上进行二次开发的工具也不断更新。从早期的AutoLisp、ADS等,到现在流行的ObjectARX、VBA、VisualLisp,都可十分方便地对AutoCAD进行二次开发。VBA即Mcrosoftoffice中的VisualBasicforApplications,它最早集成于AutoCAD2000中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD中丰富的技术框架打开一条新的通道。
2、TIN三角网的生成
TIN(TriangualatedIrregularNetwork)即不规则三角网格,它是一组互不交叉、互不重叠、相互连接的三角形网络。TIN的基本图形单元是单个的三角形,在生成TIN三角形的时候,需要按照三角形剖分准则实施,常用的三角形剖分准则有:空外接圆准则、最大最小角准则、最短距离和准则、张角最大准则、面积比准则、对角线准则。这样可以最大限度避免狭长三角形的出现,以及确保三角形网络的唯一性。
2.1逐点插入法三角网的生成
目前离散点的三角剖分使用最为广泛的算法是Delaunay直接三角剖分算法。1994年Tsai根据实现过程,把DT三角剖分分成三类,即分割合并算法、三角网增长算法以及逐点插入算法。逐而点插入法,又是应用最多的一种算法。
逐点插入法是一种动态的三角网生成方法,虽然其在逐点插入的时候,需要遍历所有的三角形,在时间上有些浪费,但是其对计算机内存占据很小,所以在DT的生成中很受青睐。逐点插入算法的实现步骤相对于其它实现方法较为简单,其步骤如下:
(1)定义包含所有数据的的初始包容盒,并对包容盒进行初始三角形剖分;
(2)对所有的数据点进行循环;
(3)处理外围的三角形。
2.1.1创建数据点包容盒
所谓包容盒就是一个可以包含所有东西的容器,在这里包容盒就是一个边界区域,这个区域包含了所有要处理的数据点。逐点插入法的包容盒可以分为数据区域凸壳、矩形包容盒以及超级三角形包容盒。
超级三角形的建立需先计算数据点X、Y方向上的极值,然后根据极值数据的相关函数确定初始三角剖分的顶点坐标。超级三角形的三顶点,也可以随意的确定,只要满足该三角形包含所有的数据点域,并且三顶点数据在原始数据后面延续,超级三角形初始剖分如图1,本设计包容盒采用超级三角形,其建立过程如下:
①根据自定义函数maxandmin(X1,X2,Y1,Y2)计算极值。
②计算顶点坐标(函数可以自选,要求包含所有数据点)。
③构成三角形初始剖分。④记录初始剖分顶点坐标N+1―N+3。
图1 超级三角形图2 空外接圆准则
2.1.2建立空外接圆准则函数
DT三角网的建立只要在空外接圆准则、最大最小角准则下便可以完成,因此需要建立一个空外接圆准则函数,以方便数据的处理。首先确定三角形外接圆,接着判断离散点是否在三角形外接圆内。可设三角形外接圆半径为R,离散点到外接圆圆心的距离为Rd,如果R≥Rd时表明离散点需要进行连接并对其进行标识,RRd时跳过不处理,可用自定义函数Circle()AsBoolean实现。如图2
2.1.3三角形的扩展
逐点插值法三角形的扩展,就是从包容盒数据初始三角形剖分开始,循环所有的离散点寻找该离散点所在的三角形,并将其三角剖分初始化,一直到所有的离散点循环结束。实现可以通过自定义函数Circle()的值来判断,如果Circle=True时,并记录外接圆所对应三角形,然后接着判断下面的三角形,直至结束。判断一个点是否扩展结束,一般采用双计数器法,即一个记录以扩展的三角形数目,另一个记录已构成的三角形数目,当两个计数器中的数目相等时,表明三角形的扩展结束,然后扩展下一个离散点,其实现代码大致如下:
If Circle=True Then
……
j=j?C1NT=NT-1
End If
Loop While jNT
2.1.4LOP准则下的优化。
LOP准则是Lawson在1977年提出的,其基本思想是运用DT三角网络的空外接圆性质对由两个有公共边的三角形组成的四边形进行判断。如果其中一个三角形的外接圆中含有第四个顶点
文档评论(0)