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

本文分享了一位编程爱好者的三维地质建模系统的开发经历,包括技术选型、难点解析及自顶向下的目标分解思路。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值