当前位置:首页 >> 编程开发 >> Visual C++ >> 内容

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

时间:2015/5/19 21:34:59 作者:平凡之路 来源:xuhantao.com 浏览:

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

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

相关文章
  • 没有相关文章
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1