苑林爽 姜軍華
(中國水利水電第六工程局有限公司烏東德施工局,云南昆明 651512)
VB環(huán)境下TIN模型的應用
苑林爽 姜軍華
(中國水利水電第六工程局有限公司烏東德施工局,云南昆明 651512)
基于三角網(wǎng)生成算法的不規(guī)則三角網(wǎng),利用VB可視化用戶界面結合數(shù)據(jù)庫實現(xiàn)離散點構建三角網(wǎng)和其數(shù)據(jù)生成。本文對不規(guī)則三角網(wǎng)生長算法實現(xiàn)的研究,利用了VB強大的可視化用戶界面及其編程語言的靈活性及簡單易懂特點,基于各行業(yè)對于DEM的需要,開發(fā)出一種利用VB6. O語言生成基于生長算法的不規(guī)則三角網(wǎng),結合數(shù)據(jù)庫強大的數(shù)據(jù)存取、編輯、查詢功能,共同實現(xiàn)離散點構建三角網(wǎng)和其數(shù)據(jù)生成。
TIN模型 VB 數(shù)據(jù)生成
首先,我們要提取出需要處理的離散點集。本文介紹的數(shù)據(jù)都是存儲在Access數(shù)據(jù)庫中的數(shù)據(jù)。這樣就要先解決VB與數(shù)據(jù)庫連接的問題,需要創(chuàng)建控件,打開專有格式的文件(Access數(shù)據(jù)庫文件格式為.mdb),然后打開數(shù)據(jù)庫中的點表(xyz),從數(shù)據(jù)庫的記錄集的第一條向下讀取直至讀出所有數(shù)據(jù)。但是我們在程序上看不出來。這時我們?nèi)绻胍纯袋c的離散狀態(tài)可以把這些點展現(xiàn)在程序中,使我們能夠直觀的看到。點數(shù)據(jù)讀出后就可以根據(jù)具體的算法進行三角網(wǎng)的生成了。
本文選用的方法是生長算法,算法的詳細步驟如下。
(1)在離散數(shù)據(jù)點集V中任取一點,以點1k為基點尋找與它最近的一點2k。連接21kk,就得到了三角形的一條基邊,把該邊作為擴展基邊,代碼如下:
(2)在擴展基邊(是有向的)的右邊點集中去找與該邊兩端點連成直線組成的夾角為最大的點3k,連接31kk,31kk就組成了第一個三角形。代碼如下:
(3)然后以32kk為第一條邊向外進行擴展。如果該邊的右邊沒有點,該邊不進行擴展;否則,轉(zhuǎn)(2)進行擴展,同時存儲新生成的邊和三角形。代碼如下:
(4)然后對下一位置的邊進行擴展,實現(xiàn)過程同步驟(3)。
(5)重復步驟(4),直至邊鏈表中的所有邊都進行了擴展,就結束構網(wǎng)。
圖1 開始界面
圖2 打開下拉菜單
為了對算法的穩(wěn)定性及可行性進行檢驗,本人在VB中實現(xiàn)了上述算法,并用一些實驗數(shù)據(jù)點驗證了上述算法,應用以上算法原理,基于VisualBasic6.0編譯環(huán)境及數(shù)據(jù)庫相結合,高效地實現(xiàn)了海量數(shù)據(jù)Delaunay三角網(wǎng)構建。實驗表明,此算法的執(zhí)行效率較高,對計算機硬件配置的要求較低。
由于我們構網(wǎng)所使用的點是我們事先所采樣測量得到的點,對于一個實際的項目應用來說,數(shù)據(jù)容量大,如果是直接人為在窗體的坐標軸中輸入數(shù)據(jù)的話,很難找準所給的采樣點位置,因此就要將數(shù)據(jù)存儲在數(shù)據(jù)庫中,進行統(tǒng)一存儲管理。本文中,是將數(shù)據(jù)庫與VB連接起來,在VB中程序運行時可直接調(diào)用數(shù)據(jù)庫中的數(shù)據(jù)。在現(xiàn)實的工程項目中,修路時要將某處的山地挖為平地,建設單位要在某些平坦的地方挖填方建造營地場地等,形成了地形的復雜多變,就要在變化的區(qū)域進行點的重新測量采樣。在構網(wǎng)時,有的地方要增加點,有的地方要刪除點,有時我們還需要查詢和編輯修改某個點的說明信息。這些都要依靠數(shù)據(jù)庫的管理。本文在VB中實現(xiàn)生成三角網(wǎng)的數(shù)據(jù)頁是直接存儲到數(shù)據(jù)庫中的。與上面打開要讀取數(shù)據(jù)的數(shù)據(jù)的一樣,我們存儲數(shù)據(jù)也要先打開數(shù)據(jù)要存儲到的數(shù)據(jù)庫。
然后就可以把生成的三角網(wǎng)的數(shù)據(jù)如三角形個點數(shù)組p1(),p2 (),p3()和與其臨近的三角型號數(shù)組t1(),t2(),t3()寫如數(shù)據(jù)庫中。程序設計完成后,針對本程序的具體操作步驟如下: (1)運行程序,見圖1。
(2)點擊打開數(shù)據(jù)庫,出現(xiàn)下拉菜單,然后選取所用數(shù)據(jù)庫,提取離散點集。見圖2。
(3)點擊菜單中展點,把離散數(shù)據(jù)點展現(xiàn)在程序窗體畫板上,見圖3。
(4)點擊生成三角網(wǎng),程序運行得到有離散數(shù)據(jù)連網(wǎng)而成的三角網(wǎng),見圖4。
(5)選擇菜單中保存數(shù)據(jù),出現(xiàn)下拉菜單,選擇保存數(shù)據(jù)的數(shù)據(jù)庫文件,對三角網(wǎng)生成的數(shù)據(jù)進行保存。見圖5。
(6)完成以上操作后,點擊推出,推出程序。
圖3 展點界面
圖4 生成的三角網(wǎng)
圖5 保存下拉菜單
實現(xiàn)上述算法具有很強的現(xiàn)實意義。TIN的直接應用價值就是生成DEM,為DEM的生成在許多領域中打下基礎。在水利水電工程中,如工程項目的填挖方計算、線路勘測設計等的應用。本文對不規(guī)則三角網(wǎng)生長算法實現(xiàn)的研究,利用了VB6.0強大的可視化用戶界面及其編程語言的靈活性及簡單易懂特點,基于各行業(yè)對于DEM的需要,開發(fā)出一種利用VB語言生成基于生長算法的不規(guī)則三角網(wǎng),結合數(shù)據(jù)庫強大的數(shù)據(jù)存取、編輯、查詢功能,實現(xiàn)離散點的管理和三角網(wǎng)的構成。
[1]周秋生.建立數(shù)字地面模型的算法研究[J].測繪工程,2001(1).
[2]賴鴻斌,李永樹.基于不規(guī)則網(wǎng)的DTM若干問題的探討[J].重慶交通學院學報,2003.