APP下载

VB环境下TIN模型的应用

2015-05-28苑林爽姜军华

中国科技纵横 2015年9期

苑林爽 姜军华

【摘 要】基于三角网生成算法的不规则三角网,利用VB可视化用户界面结合数据库实现离散点构建三角网和其数据生成。本文对不规则三角网生长算法实现的研究,利用了VB强大的可视化用户界面及其编程语言的灵活性及简单易懂特点,基于各行业对于DEM的需要,开发出一种利用VB6.0语言生成基于生长算法的不规则三角网,结合数据库强大的数据存取、编辑、查询功能,共同实现离散点构建三角网和其数据生成。

【关键词】TIN模型 VB 数据生成

1 在VB环境中构建三角网

首先,我们要提取出需要处理的离散点集。本文介绍的数据都是存储在Access数据库中的数据。这样就要先解决VB与数据库连接的问题,需要创建控件,打开专有格式的文件(Access数据库文件格式为.mdb),然后打开数据库中的点表(xyz),从数据库的记录集的第一条向下读取直至读出所有数据。但是我们在程序上看不出来。这时我们如果想要看看点的离散状态可以把这些点展现在程序中,使我们能够直观的看到。点数据读出后就可以根据具体的算法进行三角网的生成了。

本文选用的方法是生长算法,算法的详细步骤如下。

(1)在离散数据点集V中任取一点,以点 为基点寻找与它最近的一点 。连接 ,就得到了三角形的一条基边,把该边作为扩展基边,代码如下:

k1 = 1

dmin = Sqr((x(2) - x(1)) * (x(2) - x(1)) + (y(2) - y(1)) * (y(2) - y(1)))

k2 = 2

For r = 3 To dh

d = Sqr((x(r) - x(1)) * (x(r) - x(1)) + (y(r) - y(1)) * (y(r) - y(1)))

If d < dmin Then

dmin = d

k2 = r

End If

Next r

Picture1.Line (x(1), y(1))-(x(k2), y(k2)), RGB(0, 0, 255)

(2)在扩展基边(是有向的)的右边点集中去找与该边两端点连成直线组成的夹角为最大的点 ,连接 , 就组成了第一个三角形。代码如下:

k3 = 0

cosa = 1

For r = 2 To dh

If IsLeft(k1, k2, r) Then

a = fcos(k1, k2, r)

If a < cosa Then

cosa = a

k3 = r

End If

End If

Next r

If k3 > 0 Then

Picture1.Line (x(k1), y(k1))-(x(k3), y(k3)), RGB(0, 0, 255)

Picture1.Line (x(k2), y(k2))-(x(k3), y(k3)), RGB(0, 0, 255)

(3)然后以 为第一条边向外进行扩展。如果该边的右边没有点,该边不进行扩展;否则,转(2)进行扩展,同时存储新生成的边和三角形。代码如下:

k3 = 0

cosa = 1

For r = 2 To dh

If IsLeft(k2, k1, r) Then

a = fcos(k2, k1, r)

If a < cosa Then

cosa = a

k3 = r

End If

End If

Next r

If k3 > 0 Then

Picture1.Line (x(k1), y(k1))-(x(k3), y(k3)), RGB(0, 0, 255)

Picture1.Line (x(k2), y(k2))-(x(k3), y(k3)), RGB(0, 0, 255)

(4)然后对下一位置的边进行扩展,实现过程同步骤(3)。

(5)重复步骤(4),直至边链表中的所有边都进行了扩展,就结束构网。

为了对算法的稳定性及可行性进行检验,本人在VB中实现了上述算法,并用一些实验数据点验证了上述算法,应用以上算法原理,基于Visual Basic6.0编译环境及数据库相结合,高效地实现了海量数据Delaunay三角网构建。实验表明,此算法的执行效率较高,对计算机硬件配置的要求较低。

2 数据的存储

由于我们构网所使用的点是我们事先所采样测量得到的点,对于一个实际的项目应用来说,数据容量大,如果是直接人为在窗体的坐标轴中输入数据的话,很难找准所给的采样点位置,因此就要将数据存储在数据库中,进行统一存储管理。本文中,是将数据库与VB连接起来,在VB中程序运行时可直接调用数据库中的数据。在现实的工程项目中,修路时要将某处的山地挖为平地,建设单位要在某些平坦的地方挖填方建造营地场地等,形成了地形的复杂多变,就要在变化的区域进行点的重新测量采样。在构网时,有的地方要增加点,有的地方要删除点,有时我们还需要查询和编辑修改某个点的说明信息。这些都要依靠数据库的管理。本文在VB中实现生成三角网的数据页是直接存储到数据库中的。与上面打开要读取数据的数据的一样,我们存储数据也要先打开数据要存储到的数据库。

然后就可以把生成的三角网的数据如三角形个点数组p1(),p2(),p3()和与其临近的三角型号数组t1(),t2(),t3()写如数据库中。

程序设计完成后,针对本程序的具体操作步骤如下:

(1)运行程序,见下图5.1。

图5.1 开始界面

(2)点击打开数据库,出现下拉菜单,然后选取所用数据库,提取离散点集。见下图5.2。

图5.2 打开下拉菜单

(3)点击菜单中展点,把离散数据点展现在程序窗体画板上,见图5.3.

图5.3 展点界面

(4)点击生成三角网,程序运行得到有离散数据连网而成的三角网,见图5.4。

图5.4 生成的三角网

(5)选择菜单中保存数据,出现下拉菜单,选择保存数据的数据库文件,对三角网生成的数据进行保存。见下图5.5。

图5.5 保存下拉菜单

(6)完成以上操作后,点击推出,推出程序。

3 结语

实现上述算法具有很强的现实意义。TIN的直接应用价值就是生成DEM,为DEM的生成在许多领域中打下基础。在水利水电工程中,如工程项目的填挖方计算、线路勘测设计等的应用。本文对不规则三角网生长算法实现的研究,利用了VB6.0强大的可视化用户界面及其编程语言的灵活性及简单易懂特点,基于各行业对于DEM的需要,开发出一种利用VB语言生成基于生长算法的不规则三角网,结合数据库强大的数据存取、编辑、查询功能,实现离散点的管理和三角网的构成。

参考文献:

[1]周秋生.建立数字地面模型的算法研究[J].测绘工程,2001(1).

[2]赖鸿斌,李永树.基于不规则网的DTM若干问题的探讨[J].重庆交通学院学报,2003.