本發(fā)明涉及計算機軟件開發(fā)技術(shù)領(lǐng)域,尤其涉及一種基于約束Delaunay TIN插值算法的表面模型構(gòu)建方法,具體涉及三維可視化、地質(zhì)建模、數(shù)值計算以及地質(zhì)災(zāi)害評估。
背景技術(shù):
表面模型是三維可視化與工程地質(zhì)建模的核心內(nèi)容,其準(zhǔn)確性將直接影響可視化效果與地質(zhì)模型的正確性。同時,由于地表模型中蘊含著豐富的地理信息,在數(shù)值計算分析與地質(zhì)災(zāi)害評估中經(jīng)常被作為研究對象與分析結(jié)果展示的載體,若表面模型中節(jié)點高程出現(xiàn)畸變或者網(wǎng)格大小及分布不合理,那么計算與評價結(jié)果可能與實際情況相去甚遠(yuǎn),決策方案南轅北轍,甚至導(dǎo)致不必要的財產(chǎn)損失與人員傷亡,造成不良社會影響。因此,有必要研究一種準(zhǔn)確、優(yōu)質(zhì)的表面模型構(gòu)建方法。
在目前的地表模型構(gòu)建方法中,一方面,沒有考慮網(wǎng)格大小及其分布的合理性,往往在局部出現(xiàn)細(xì)長、狹小的病態(tài)三角形面片,給表面模型的進(jìn)一步處理與應(yīng)用造成了極大的困難;另一方面,在高程插值過程中并未充分考慮初始點、線等準(zhǔn)確信息的約束條件,所采用的插值方法極易造成高程值的極大化或者極小化,這種畸變幾乎很難通過后續(xù)的處理手段來有效去除,并且在消除畸變時往往會引起表面模型的失真,最終導(dǎo)致獲得的表面模型準(zhǔn)確度較低、合理性較差。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有地表模型構(gòu)建方法中經(jīng)常出現(xiàn)病態(tài)三角形面片,未充分考慮初始點、線等準(zhǔn)確信息的約束條件,插值獲得的高程容易形成畸變,表面模型準(zhǔn)確度較低、合理性較差等不足,提供一種基于約束Delaunay TIN插值算法的表面模型構(gòu)建方法。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:
讀取包含表面模型點、線空間幾何信息的DXF文件,在此基礎(chǔ)上,基于Delaunay TIN網(wǎng)格剖分算法,充分考慮初始TIN的約束條件,根據(jù)插入點所處的點、線、面不同位置分別采用不同插值方法,實現(xiàn)了優(yōu)化Delaunay TIN網(wǎng)格各節(jié)點高程的獲取與表面模型的建立,并通過vtkpython對其進(jìn)行可視化顯示。
具體地說:
一、基于約束Delaunay TIN插值算法的表面模型構(gòu)建系統(tǒng)(簡稱系統(tǒng))
本系統(tǒng)包括數(shù)據(jù)處理單元10、表面模型生成單元20、表面模型顯示單元30、輸入點線數(shù)據(jù)40和輸出表面模型50;
輸入點線數(shù)據(jù)40、數(shù)據(jù)處理單元10、表面模型生成單元20、表面模型顯示單元30和輸出表面模型50依次交互;表面模型生成單元20和輸出表面模型50交互。
二、基于約束Delaunay TIN插值算法的表面模型構(gòu)建方法(簡稱方法)
本方法包括以下步驟:
①針對三維多線段DXF文件數(shù)據(jù)處理
將表面模型初始CAD圖形文件中點、線轉(zhuǎn)化成空間點與三維多線段,并形成空間坐標(biāo)DXF文件;
通過DXF讀取模塊獲得空間坐標(biāo)DXF文件中指定圖層的點、線三維坐標(biāo);
對獲得的三維坐標(biāo)采用數(shù)據(jù)修正模塊進(jìn)行調(diào)整或刪除處理;
②基于約束Delaunay TIN插值算法的表面模型生成
以處理后的點、線數(shù)據(jù)作為初始約束TIN構(gòu)建模塊的輸入,形成初始約束三角形網(wǎng)格;
以處理后的點、線數(shù)據(jù)作為優(yōu)化Delaunay TIN生成模塊的輸入,形成優(yōu)化后約束三角形網(wǎng)格;
以初始約束三角形網(wǎng)格為基礎(chǔ)數(shù)據(jù),通過優(yōu)化Delaunay TIN節(jié)點高程插值模塊對優(yōu)化后約束三角形網(wǎng)格中新增節(jié)點高程進(jìn)行插值;
通過Delaunay TIN表面生成模塊更改優(yōu)化后約束三角形網(wǎng)格各節(jié)點高程,形成表面模型;
③基于vtkpython的表面模型顯示
提取TIN表面模型中各三角形單元幾何與拓?fù)浣Y(jié)構(gòu)信息,采用表面模型可視化模塊進(jìn)行可視化展示。
本發(fā)明具有下列特點:
①在地表模型構(gòu)建中,考慮網(wǎng)格大小、形狀及其分布的合理性,盡量保證地表模型中網(wǎng)格質(zhì)量優(yōu)良;
②在高程插值過程中充分考慮初始點、線等準(zhǔn)確信息的約束條件,根據(jù)插值點所處位置采用不同插值方法;
③生成的表面模型準(zhǔn)確性較高、網(wǎng)格形狀及分布合理,更適合于數(shù)值計算與災(zāi)害評估等方面的應(yīng)用;
④充分利用vtkpython庫提供的對象與函數(shù),有效提高點在初始TIN網(wǎng)格中定位的效率。
依據(jù)上述特點和實際應(yīng)用,本發(fā)明收到下列的有益效果:
①有效消除在局部出現(xiàn)細(xì)長、狹小的病態(tài)三角形面片的現(xiàn)象;
②有效消除了高程在局部產(chǎn)生的畸變;
③表面模型準(zhǔn)確度較高、合理性較強,彌補了目前地表模型在約束條件下構(gòu)建方法的不足。
附圖說明
圖1是本系統(tǒng)的結(jié)構(gòu)方框圖;
圖2是數(shù)據(jù)過濾單元10工作流程圖;
圖3是數(shù)據(jù)處理單元20工作流程圖;
圖4是數(shù)據(jù)傳輸單元30工作流程圖。
圖5是表面模型顯示單元30的工作流程圖。
其中:
10—數(shù)據(jù)處理單元,
11—DXF讀取模塊,
12—數(shù)據(jù)修正模塊,
13—初始CAD圖形文件,
14—空間坐標(biāo)DXF文件;
20—表面模型生成單元,
21—初始約束TIN構(gòu)建模塊,
22—優(yōu)化Delaunay TIN生成模塊,
23—優(yōu)化Delaunay TIN節(jié)點高程插值模塊,
24—Delaunay TIN表面生成模塊;
30—表面模型顯示單元,
31—表面模型可視化模塊;
40—輸入點線數(shù)據(jù);
50—輸出表面模型。
具體實施方式
以下結(jié)合附圖詳細(xì)說明:
一、系統(tǒng)
1、總體
如圖1,本系統(tǒng)包括數(shù)據(jù)處理單元10、表面模型生成單元20、表面模型顯示單元30、輸入點線數(shù)據(jù)40和輸出表面模型50;
輸入點線數(shù)據(jù)40、數(shù)據(jù)處理單元10、表面模型生成單元20、表面模型顯示單元30和輸出表面模型50依次交互;表面模型生成單元20和輸出表面模型50交互。
2、功能塊
1)數(shù)據(jù)處理單元10
數(shù)據(jù)處理單元10包括依次交互的初始CAD圖形文件13、空間坐標(biāo)DXF文件14、DXF讀取模塊11和數(shù)據(jù)修正模塊12;
表面模型初始CAD圖形文件13為空間坐標(biāo)DXF文件14的基礎(chǔ)數(shù)據(jù),DXF讀取模塊11將空間坐標(biāo)DXF文件14讀入內(nèi)存,數(shù)據(jù)修正模塊12完成對內(nèi)存中數(shù)據(jù)的修正。
(1)初始CAD圖形文件13中存儲表面模型構(gòu)建所需的點、線三維空間數(shù)據(jù),其中線條為三維多線段;
(2)空間坐標(biāo)DXF文件14為初始CAD圖形文件13的一種文件交換格式;
(3)DXF讀取模塊11能夠?qū)臻g坐標(biāo)DXF文件14中點、線坐標(biāo)及其拓?fù)潢P(guān)系進(jìn)行識別并進(jìn)行讀??;
(4)數(shù)據(jù)修正模塊12用來對DXF讀取模塊11獲得的點、線高程值進(jìn)行檢查、修正以及刪除。
2)表面模型生成單20
表面模型生成單20包括初始約束TIN構(gòu)建模塊21、優(yōu)化Delaunay TIN生成模塊22、優(yōu)化Delaunay TIN節(jié)點高程插值模塊23和Delaunay TIN表面生成模塊24;
初始約束TIN構(gòu)建模塊21和優(yōu)化Delaunay TIN生成模塊22分別與優(yōu)化Delaunay TIN節(jié)點高程插值模塊23交互,優(yōu)化Delaunay TIN節(jié)點高程插值模塊23和Delaunay TIN表面生成模塊24交互。
通過初始約束TIN構(gòu)建模塊21對處理后的點、線數(shù)據(jù)建立初始約束三角形網(wǎng)格;
通過優(yōu)化Delaunay TIN生成模塊22對處理后的點、線數(shù)據(jù)建立優(yōu)化后約束三角形網(wǎng)格;
在初始約束TIN構(gòu)建模塊21與優(yōu)化Delaunay TIN生成模塊22基礎(chǔ)上,通過優(yōu)化Delaunay TIN節(jié)點高程插值模塊23對優(yōu)化后約束三角形網(wǎng)格中節(jié)點高程進(jìn)行插值;
通過Delaunay TIN表面生成模塊24形成表面模型。
(1)初始約束TIN構(gòu)建模塊21將處理后的點、線數(shù)據(jù)離散為PLSG格式文件,然后在不增加額外節(jié)點基礎(chǔ)上,建立初始約束TIN;
(2)優(yōu)化Delaunay TIN生成模塊22將處理后的點、線數(shù)據(jù)離散為PLSG格式文件,然后根據(jù)網(wǎng)格質(zhì)量要求,通過增加額外的節(jié)點,建立優(yōu)化后的約束TIN;
(3)優(yōu)化Delaunay TIN節(jié)點高程插值模塊23根據(jù)優(yōu)化后的約束TIN任一點在初始約束TIN所處的空間位置,分別采用不同插值方法獲得該點的高程值;
(4)Delaunay TIN表面生成模塊24用來更改優(yōu)化后約束三角形網(wǎng)格各節(jié)點高程,形成表面模型。
3)表面模型顯示單元30
提取優(yōu)化后約束三角形網(wǎng)格單元幾何與拓?fù)浣Y(jié)構(gòu)信息,通過表面模型可視化模塊(31)進(jìn)行可視化展示。
(1)表面模型可視化模塊(31)通過vtkpython庫實現(xiàn)對優(yōu)化后約束三角形網(wǎng)格構(gòu)成的三維表面模型進(jìn)行顯示。
4)輸入點線數(shù)據(jù)40
從DXF文件中導(dǎo)入建模所需的點、線數(shù)據(jù)。
5)輸出表面模型50
將獲得的表面模型網(wǎng)格數(shù)據(jù)或者VTK場景中顯示的面模型進(jìn)行輸出。
二、方法
1、數(shù)據(jù)處理單元10的工作流程
如圖2,數(shù)據(jù)處理單元10的工作流程包括下列步驟:
A、獲取DXF文件數(shù)據(jù)-101
將包含點、線三維坐標(biāo)信息的DXF文件讀入內(nèi)存;
B、關(guān)鍵字判別-102
提取文件每一行的字符,根據(jù)關(guān)鍵字提取對應(yīng)信息;
C、分為兩路
C1、空間點數(shù)據(jù)獲取-103
若某一行字符為“POINT”,且為所需圖層,則依次獲取后續(xù)關(guān)鍵字“10”,“20”,“30”所對應(yīng)的x,y,z坐標(biāo)值;
C2、三維多線段數(shù)據(jù)獲取-104
若字符“POLYLINE”與“VERTEX”連續(xù)出現(xiàn),且為所需圖層,則依次獲取后續(xù)關(guān)鍵字“10”,“20”,“30”所對應(yīng)的x,y,z坐標(biāo)值,并對點進(jìn)行連續(xù)編號,形成線段拓?fù)湫畔ⅲ?/p>
D、完成信息的獲取-105
依次遍歷DXF文件所有數(shù)據(jù)行,完成所有點、線數(shù)據(jù)的提?。?/p>
E、高程數(shù)據(jù)的修正處理-106
將所有獲取的數(shù)據(jù)點高程的異常值進(jìn)行改正或刪除處理;
F、交付表面模型生成單元-107
將修正后的數(shù)據(jù)傳入表面模型生成單元。
2、表面模型生成單元20的工作流程
如圖3,表面模型生成單元20的工作流程包括下列步驟:
a、生成PLSG文件格式-201
將獲得的數(shù)據(jù)轉(zhuǎn)換成為只包括點與線段的PLSG文件形式;
b、初始TIN的建立-202
以PLSG文件中的點、線為基礎(chǔ)建立初始三維TIN;
c、優(yōu)化Delaunay TIN的構(gòu)建-203
以PLSG文件中的點、線為基礎(chǔ),通過增加更多的節(jié)點,形成優(yōu)質(zhì)的Delaunay TIN模型;
d、優(yōu)化Delaunay TIN節(jié)點高程插值-204
通過三角形重心內(nèi)插與線性插值方法獲得優(yōu)化Delaunay TIN中各節(jié)點的高程;
e、表面模型的生成-205
對優(yōu)化Delaunay TIN中各節(jié)點賦高程值,形成表面模型;
f、交付表面模型顯示單元-206
將所生成的表面各節(jié)點空間坐標(biāo)與三角形拓?fù)浣Y(jié)構(gòu)信息傳給表面模型顯示單元。
3、表面模型生成單元20中優(yōu)化Delaunay TIN節(jié)點高程插值204的工作流程
如圖4,表面模型生成單元20中優(yōu)化Delaunay TIN節(jié)點高程插值204的工作流程包括下列步驟:
ⅰ、獲取優(yōu)化Delaunay TIN任一節(jié)點P(x,y)-2041
歷遍優(yōu)化Delaunay TIN中所有節(jié)點,對于任一節(jié)點P(x,y)都要經(jīng)過以下ⅰ~ⅵ步驟;
ⅱ、初始TIN中距P(x,y)最近的點Q(x,y)-2042
通過VTK中數(shù)據(jù)集合對象得到初始TIN中距P(x,y)最近的點Q(x,y);
ⅲ、判斷P(x,y)與Q(x,y)是否同一點
通過所設(shè)置的兩點距離容許誤差,判斷P(x,y)與Q(x,y)是否同一點-2043;
是則通過P(x,y)即為Q(x,y)的高程-2047進(jìn)入步驟ⅵ,否則進(jìn)入步驟ⅳ;
ⅳ、提取點Q(x,y) 所有鄰接三角形TA
若P(x,y)與Q(x,y)為不同的點,在初始TIN中中提取與點Q(x,y)鄰接的所有三角形的集合TA-2044;
ⅴ、判斷點P(x,y)是否在TA內(nèi)
判斷點P(x,y)是否位于TA所形成的區(qū)域內(nèi)-2045,是則:
*若點P(x,y)位于在TA內(nèi),且位于某三角形內(nèi)部,則采用三角形中心坐標(biāo)插值方法來計算點P(x,y)的高程,三角形重心內(nèi)插法-2048;
*若點P(x,y)位于在TA內(nèi),且位于某一條邊上,則采用線段兩端點線性插值方法來計算點P(x,y)的高程,兩端點線性插值法-2049;
否則通過不斷擴大TA范圍-20410跳轉(zhuǎn)到步驟ⅳ;
ⅵ、獲得點Q(x,y)的高程。
4、表面模型顯示單元30的工作流程
如圖5,表面模型顯示單元30的工作流程包括下列步驟:
Ⅰ、VTK數(shù)據(jù)格式的生成-301
將優(yōu)化、插值后的表面模型轉(zhuǎn)化為vtkpython中vtkPolydata類型數(shù)據(jù)格式;
Ⅱ、表面模型的顯示-302
將vtkPolydata數(shù)據(jù)通過VTK中vtkActor對象進(jìn)行顯示。