程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 編三維地質建模系統-整體思路

編三維地質建模系統-整體思路

編輯:關於C++

接手三維地質建模系統編制的項目時,我只是一個很菜鳥的業余編程愛好者, 但我對於這個項目很感興趣,不管結果如何,參與這個項目的過程就很有意思。

語言選擇:c++。選擇c++是考慮到c++可以向下兼容c,同時兼具面向對象的特 征。

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的數據體,實現多層地層建模。

進一步分解:

①給定100個地層層面離散點,將地質數據體分為兩個層塊,實現對兩個層塊 分別進行屬性值插值。

②給定少於100個離散點,自動延拓到數據體邊界。

③給定多於100個離散點,自動裁剪到數據體邊界。

④增加一個與上一個地層近平行不相接的地層層面,將地質數據體分為三個層 塊,實現對三個層塊分別進行屬性值插值。

⑤增加一個與上一個地層部分相接的地層層面,將地質數據體分為三個層塊, 實現對三個層塊分別進行屬性值插值。

⑥實現任意多層層面任意拓撲關系的地質建模和屬性插值算法。

(2)建立一個100×100×100的數據體,實現地層-斷層混合建模 。

進一步分解:

①實現一個地層面與一個斷層面的相交線的求取算法

②實現根據一對相交線對一個地層進行撕裂的算法,並分塊進行屬性值插值。

③實現根據一對相交線對多個地層進行撕裂的算法,並分塊進行屬性值插值。

④實現根據兩對相交線對多個地層進行撕裂的算法,並分塊進行屬性值插值。

⑤實現根據任意多個相交線對多個地層進行撕裂的算法,並分塊進行屬性值插 值。

(3)建立一個10000×10000×10000的數據體,實現地層-斷層混 合建模。

進一步分解:

①將原始數據進行抽稀,使每個層面的數據少於等於10000.

②利用內存映射的技術對數據進行簡單操作。

③將第二步驟的算法用內存映射的技術進行算法重新編寫。

(4)實現三維地質模型的三維顯示。

(5)實現三維地質模型的三維交互(實時查詢與修改模型)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved