菜鸟编三维地质建模系统-整体思路

      接手三维地质建模系统编制的项目时,我只是一个很菜鸟的业余编程爱好者,但我对于这个项目很感兴趣,不管结果如何,参与这个项目的过程就很有意思。

     语言选择: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)实现三维地质模型的三维交互(实时查询与修改模型)

 

 

 

 

你可能感兴趣的:(三维地质建模系统)