苑林爽 姜軍華
【摘 要】基于三角網生成算法的不規則三角網,利用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.