計算機等級考試編三維地質建模系統整體思路
IDE:本來打算利用VC++6.0,因為VC++6.0是目前的主流開發三維可視化的IDE,不過使用難度較大,而且我們領導用的是C++ BUILDER,C++ BUILDER具有上手快、制作界面簡易的優點,于是選擇用BCB了。
三維圖形庫:利用open graphics library(opengl),至于Open Inventor(OIV),暫時不打算用,在開發過程中如果OPENGL用得比較好了再考慮是否用OIV。
主要難點:
(1)地質三維建模方法:地質體是一個三維的、非均質性非常明顯的復雜體,和CAD系統相比建模方法要復雜很多。
(2)三維地質模型的三維顯示與交互:特別是交互功能的實現比較困難。
(3)對海量數據的處理:地質體三維數字化數據是非常龐大的,一個地層就動輒數十、上百萬個離散點。
自頂向下的目標分解思路:
三維地質建模系統是一個很龐大的軟件工程,如果不進行目標分解來逐步達成的話,實現起來將會遙遙無期。1961年,美國為了實現1970年登上月球曾經制定了詳細的登月計劃:
(1)發射火箭到大氣層;
(2)環繞地球;
(3)發射火箭,環繞月球;
(4)月球著陸器從火箭中分離,在月面降落;
(5)月球著陸器離開月球,與軌道艙會合;
(6)返回地球;
(7)進入大氣層;
(8)返回艙安全墜入大海。
然后每一個階段目標更進一步地分解為更小的目標,果然在1969年,人類首次登陸月球。
我們進行的目標分解過程如下:
(1)建立一個100×100×100的數據體,實現多層地層建模。
進一步分解:
?、俳o定100個地層層面離散點,將地質數據體分為兩個層塊,實現對兩個層塊分別進行屬性值插值。
?、诮o定少于100個離散點,自動延拓到數據體邊界。
?、劢o定多于100個離散點,自動裁剪到數據體邊界。
?、茉黾右粋€與上一個地層近平行不相接的地層層面,將地質數據體分為三個層塊,實現對三個層塊分別進行屬性值插值。
⑤增加一個與上一個地層部分相接的地層層面,將地質數據體分為三個層塊,實現對三個層塊分別進行屬性值插值。
?、迣崿F任意多層層面任意拓撲關系的地質建模和屬性插值算法。
(2)建立一個100×100×100的數據體,實現地層-斷層混合建模。
進一步分解:
①實現一個地層面與一個斷層面的相交線的求取算法
?、趯崿F根據一對相交線對一個地層進行撕裂的算法,并分塊進行屬性值插值。
③實現根據一對相交線對多個地層進行撕裂的算法,并分塊進行屬性值插值。
④實現根據兩對相交線對多個地層進行撕裂的算法,并分塊進行屬性值插值。
⑤實現根據任意多個相交線對多個地層進行撕裂的算法,并分塊進行屬性值插值。
(3)建立一個10000×10000×10000的數據體,實現地層-斷層混合建模。
進一步分解:
①將原始數據進行抽稀,使每個層面的數據少于等于10000.
?、诶脙却嬗成涞募夹g對數據進行簡單操作。
?、蹖⒌诙襟E的算法用內存映射的技術進行算法重新編寫。
(4)實現三維地質模型的三維顯示。
(5)實現三維地質模型的三維交互(實時查詢與修改模型)