張靜
摘 要:在以往的計算機方法境界圈定中都需建立礦塊模型,逐個塊段掃描導(dǎo)致運算速度慢,不能滿足大數(shù)據(jù)量計算,該文針對以上問題在建模方面采用了礦體表面模型,該模型采用一種再現(xiàn)傳統(tǒng)手繪的建模方法,通過一系列平面圖或剖面圖的礦體邊界多邊形進行線框建模技術(shù)來描述礦體空間分布即線框構(gòu)模法。在讀取平面圖或剖面圖中礦體邊界多邊形的工作中需要運用圖形學(xué)、分形學(xué)等理論,實現(xiàn)了對矢量圖形圖元素的提取。完成礦巖多邊形提取后便可以利用線框構(gòu)模法進行礦體線框模型的建立,最后利用OpenGL技術(shù)對線框模型進行填充,生成礦體表面模型。
關(guān)鍵詞:礦體表面模型 圖形學(xué) 線框構(gòu)模法
中圖分類號:P623 文獻標(biāo)識碼:A 文章編號:1672-3791(2015)06(c)-0101-02
目前在露天礦山中使用的計算機境界圈定方法大部分是浮動圓錐法和圖論法。浮動圓錐法、圖論法都需建立礦塊經(jīng)濟模型,利用一定的算法將整個礦床進行分割成矩形的塊體,再利用計算機逐個掃描各個塊體的經(jīng)濟凈值,確定可采部分。該方法確實較為準(zhǔn)確的計算出礦床的經(jīng)濟開采價值,但是只能應(yīng)用于數(shù)據(jù)量較小的礦床,由于大部分礦山數(shù)據(jù)量巨大,所以對于海量的礦山數(shù)據(jù)還是有心無力。該文采用礦體表面模型技術(shù)取代礦塊模型,不僅用于三維顯示,而且用于礦巖量的計算,在這方面做了一次嘗試,經(jīng)實踐,這種模型速度快、精度高。
1 構(gòu)建礦體表面模型的步驟
(1)利用VB開發(fā)語言編寫程序自動讀取DXF數(shù)據(jù)格式的分層平面圖,并進行重繪。將各層礦體邊界多邊形折點坐標(biāo)、各層礦體連接的屬性信息保存到數(shù)據(jù)庫中;
(2)利用線框構(gòu)模法對讀取的分層平面圖中的礦體邊界多邊形數(shù)據(jù),結(jié)合連接屬性信息構(gòu)造線框模型;
(3)結(jié)合OpenGL技術(shù)對構(gòu)建的線框模型進行表面填充,生成最終的礦體表面模型;
(4)利用體積法計算礦體儲量。
2 礦體表面模型的建立
2.1 DXF格式數(shù)據(jù)讀取與重繪
讀取DXF格式的各水平分層平面圖是為了將各層的圖形文件以坐標(biāo)的形式存儲到數(shù)據(jù)庫中,再利用程序進行圖形的重繪。
DXF格式數(shù)據(jù)中包含多種圖元類型,由于該文主要研究對象是礦山水平分層平面圖,其中的圖元要素主要由多段線繪制的不規(guī)則多邊形組成,所以我們只關(guān)心多段線坐標(biāo)與屬性的讀取與重繪。從DXF文件讀取POLYLINE的算法流程如圖1。
利用VB開發(fā)工具按照上述流程編寫程序讀取DXF文件中礦體多邊形折點坐標(biāo),將其坐標(biāo)信息、各層礦體連接屬性信息保存到數(shù)組或數(shù)據(jù)庫中。
程序中主要的數(shù)據(jù)結(jié)構(gòu)如下:
Type DataSet
Key As Integer
Value As Variant
End Type
Type Geometry
Type As String
Data() As DataSet
End Type
Type Block
Name As String
Entities() As Geometry
End Type
Type DXFData
Blocks() As Block
Entities() As Geometry
End Type
利用繪圖函數(shù)LINE或者LINETO讀取數(shù)據(jù)庫或數(shù)組中的幾何坐標(biāo)按照前后順序信息逐個連接起來繪制出閉合的矢量圖。
2.2 建立礦體線框模型
利用讀取與重繪的分層平面圖的礦體邊界多邊形(如圖2),結(jié)合其連接屬性利用三角網(wǎng)算法建立礦體線框模型。
圖2中每一個封閉的多邊形為這一水平層的礦體邊界多邊形,構(gòu)造礦體線框模型的方法是以一個平面的封閉多邊形為基面,選擇其鄰近面的封閉多邊形利用“外接矩形等分法[1]”,確定兩層的封閉多邊形邊界點與點的對應(yīng)關(guān)系,連接相鄰兩層多邊形邊界的折點坐標(biāo),最后建立一個個的小三角形,這樣遞歸運算將所有水平層的封閉多邊形依此方式計算,最后形成礦體線框模型,如圖5。
外接矩形等分法介紹如下:
利用外接矩形將相鄰的兩層封閉多邊形進行等分,這樣等分線便會與封閉多邊形邊界產(chǎn)生若干個新的交點,兩層新產(chǎn)生的交點便具有一一對應(yīng)的關(guān)系。原理如下:首先以一個分層的封閉多邊形做外接矩形,對此外接矩形進行等分,多邊形邊界與等分線出現(xiàn)交點分別為(a1,a1),(a2,a2)……(an,an)如圖3。
選取相鄰分層,找到具有相同連接屬性的礦體多邊形同樣做外接矩形,進行等分,其交點為(b1,b1),(b2,b2)……(bn,bn)如圖4所示。從兩圖中可以看出等分交點對應(yīng)的關(guān)系,即a1-b1,a1-b1,a2-b2 ,a2-b2……an-bn,an-bn。
確定好相鄰分層多邊形的等分交點對應(yīng)關(guān)系后,取其對應(yīng)關(guān)系的兩點中的一點做為基準(zhǔn)搜索離該點最近的另一個點,利用這三個點建立三角形,如此進行循環(huán),最后形成了一個表面為三角網(wǎng)的線框模型,如圖5。將所有三角形按照編號保存到定義的集合當(dāng)中。定義的三角形集合數(shù)據(jù)結(jié)構(gòu)如下:
Type TIN
a() as POINT
b() as POINT
c() as POINT
No as long
EndType
2.3 建立礦體表面模型
線框模型是利用網(wǎng)狀表面來反映礦體模型的外觀的,是建立表面模型的基礎(chǔ),將線框模型進行表面化可以利用OpenGL[2~3]的圖形庫,調(diào)用glPolygonMode函數(shù),以GL_FILL作為參數(shù)逐個調(diào)取集合中的三角形,填充各個三角形,構(gòu)造礦體表面模型,如圖6。具體算法如下:
(1)設(shè)置狀體變量;
(2)從數(shù)據(jù)庫中搜索第i個平面的第m頂點,根據(jù)“外接矩形等分法”得到的第i+1平面上與m頂點有對應(yīng)關(guān)系的頂點n,再以m進行搜索,找到距其最近的另一點m+1;
(3)以m、m+1、n三點繪制三角形,并進行填充;
(4)對m進行遞增,m=m+1,重復(fù)步驟(2),直至第i水平與第i+1水平之間被三角面包圍;
(5)對i進行遞增,i=i+1,重復(fù)步驟(2),直至所有的水平分層之間被三角面包圍。最后形成6所示的礦體表面模型。
2.4 礦體儲量計算
建立的礦體表面模型主要是利用DXF文件中的礦體邊界多邊形經(jīng)過三角化處理、OpenGL填充最終構(gòu)造出三維模型。建立好礦體表面模型后可以通過各分層不規(guī)則礦體邊界多邊形的面積與各個分層間的高度計算礦體的體積,該方法嚴(yán)格按照礦體實際走向而計算的,所以其計算結(jié)果準(zhǔn)確。主要公式如下:
式中:為第點坐標(biāo);
為多邊形節(jié)點數(shù);
通過上式可以求出各個水平層封閉多邊形的面積,采用微積分原理將各個水平的高度進行微分計算,再經(jīng)過積分處理便得到了接近真實的礦體儲量。其礦體儲量計算公式如下:
式中:為第層的閉合多邊形面積;為各個水平的間距。
通過上述公式的計算便能夠得到地下礦體的體積儲量。
3 結(jié)語
根據(jù)該文的研究利用VB開發(fā)語言編寫程序讀取和重繪各分層水平圖的礦體多邊形;利用線框構(gòu)模法構(gòu)建礦體線框模型;結(jié)合OpenGL圖形庫對線框模型進行表面填充,生成礦體表面模型;最后利用體積法根據(jù)礦體的實際走向計算出礦體的儲量,經(jīng)過真實的礦山數(shù)據(jù)驗證,礦體表面模型運算速度快,計算準(zhǔn)確。
參考文獻
[1] 吳慧欣.三維建模技術(shù)的研究與應(yīng)用[D].西安:西安建筑科技大學(xué),2004.
[2] 屈紅剛,潘懋,馬照亭,等.基于OpenGL的3維場景矢量打印輸出研究與實現(xiàn)[J].測繪通報,2006(5):67-70.
[3] 吳斌,畢麗蘊.OpenGL編程實例與技巧[M].北京:人民郵電出版社,1999.