诸葛政桦
ZHUGE Zhenghua
随着我国地下空间工程建设的不断发展,工程地质分析越来越受到工程勘察部门、设计部门的重视。工程地质三维剖切可以清晰地展现地下空间的内部细节,极大地增强工程地质分析的直观性和准确性,其重要性日益显现,因此工程地质三维剖切的实现成为工程地质研究中的热点[1]。近年来,国内外许多学者对此进行了研究,如:以似三棱柱为体元表达的三维模型的切割操作[2- 3];通过切割多层DEM生成剖面[4]。这些方法利用构成模型的各个面与边与剖面求交线,最后构成整个剖面的轮廓线,形成地质三维模型的剖切面,需要对三维模型所有的线和面进行搜索,计算量较大[5]。本文利用标准地层层序来建立工程地质三维模型,以剖切平面生成的虚拟钻孔来完成工程地质三维模型的剖切。
工程地质三维剖切的实现需要对工程地质三维模型和剖切平面求加运算,在计算机技术迅速发展的今天,面向对象编程(OOP)在广泛开拓与应用[6],利用OOP技术对工程地质三维模型进行剖切,概念明确,可以简便地实现集成和抽象。
地层在空间上大体呈层状分布,且每一层都由上下层面及边界面构成,因此,三维地层构造就相当于地层层面及边界面的构造[7]。为了正确反映地层层面的拓扑关系、符合原始资料获取的特点、很好地表达土层尖灭的现象,本文利用标准地层层序来构造工程地质三维模型,以克里金(Kriging)插值法拟合层面高程,其流程见图1。
图1 三维地质建模流程图
地层层序定律表明,在正常情况下,老的地层沉积在下,新的地层沉积在上。按照地层层序定律,确定研究区域地层总数及层与层之间的空间关系,通过钻孔遇到的岩土最大层数确定研究区域地层总数,相同岩性并在垂直方向位置相似的看作一层,然后根据层与层的上下关系确定地层的排序,即根据钻孔遇到的岩土层竖向Z坐标的上下关系,确定地层排序[8],建立研究区域标准地层层序表。
由于某些区域存在地层缺失或地层尖灭现象,有些标准地层可能不在钻孔揭示的地层中,不利于地层层面的构造。因此需要标准化钻孔资料,即令缺失地层的厚度为0,也就是该地层层底和层面的标高相同,且均等于上层地层层底的标高[9],然后比对标准层序表的内容,将该缺少地层的信息添加进钻孔资料中。
根据标准化后的钻孔数据,采用不规则三角网(Triangular Irregular Network,TIN)来描述各地层层面。依次填充相邻地层层面TIN垂直对应的三角形,形成实体三维模型[9]。
工程地质三维剖切的实现,其实质是根据剖切平面将工程地质三维实体分割成两个三维实体,其关键是拆分被剖切的工程地质三维实体。而工程地质三维实体由层面TIN构成,层面TIN又有钻孔点三角化形成,因此,拆分工程地质实体需要拆分钻孔点。
由于剖切平面垂直于xoy平面,因此,可以将剖切平面和工程地质三维模型都投影到xoy平面,将三维问题简化为二维问题[10]。剖切平面在xoy平面的投影为一根直线,如图2中的粗线,工程地质三维模型在xoy平面的投影为层面TIN,如图2所示的细线。剖切平面将构成层面TIN的钻孔点分解成两组,P2、P3、P4、P5、P6为一组,P1、P7、P8为一组。
图2 地质TIN与剖切平面投影图
虚拟钻孔由两类数据构成,一类数据是虚拟钻孔的地理数据,即虚拟钻孔在何处虚拟生成。为准确表达工程地质三维实体在剖切平面处的地质情况,在剖切平面与层面TIN边相交的交点处虚拟出钻孔,如图3中的X1、X2、X3、X4、X5、X6。
图3 虚拟钻孔图
图4 虚拟钻孔插值计算示意图
一类为虚拟钻孔的层面数据,即虚拟钻孔各地层层面标高,其数值需要进行插值计算。计算时依次序从上到下遍历标准地层层序表的每个地层面,虚拟钻孔在该地层面的标高按其到所在TIN边的两个钻孔的距离线性插值确定,如虚拟钻孔X1各个地层层面标高可按下式(1)计算[11],如图4。
(1)
式(1)中:i=1,2,…标准地层数;
Zi为虚拟钻孔X1第i个地层面标高,Z1i为P1钻孔第i个地层面标高,Z2i为P8钻孔第i个地层面标高;l1为X1至P1钻孔距离,l2为X1至P8钻孔距离,l为P1、P8钻孔之间的距离。
在生成各部分三维地质实体时,为反映地质剖面的实际情况,应将剖切时生成的虚拟钻孔分别加入到上述拆分成两组的构成TIN的钻孔点集中,以X1→X2→X3→X4→X5→X6剖面为约束条件,进行有约束条件的Delauney三角网剖分,形成TIN模型,如图5所示。
图5 重生成的TIN模型
按照利用标准地层层序表建立工程地质三维模型的方法分别生成两部分三维地质实体,并利用OpenGL实现工程地质三维剖切。
工程地质三维剖切概念明确,对象层次清晰,具有面向对象的特点,易于采用面向对象技术编程实现。
面向对象技术首先应对问题抽象成类,并且建立类之间的消息机制及类之间的关系,即进行工程地质三维剖切的概念设计。工程地质三维剖切的概念设计如图6。
图6 工程地质剖切概念设计
根据概念模型,抽象出工程地质三维剖切类并采用类图表示,如图7。
图7 工程地质三维剖切类图
如上图7,工程地质三维剖切主要类有CSolid(工程地质三维实体类)、CDrillHoles(钻孔集合类)、CPlane(剖切平面类)、OpenGLSense(图形输出类)。CDrillHoles类由CDrillHole类组合形成,并通过CDelauney类的Trangulate方法实现CTins类,由CTins类实现CSolid类,利用CPlane类中Cut方法实现工程地质三维实体的剖切。OpenGLSense类中包含CDrillHoles和CSolid这两个图形绘制类,CDrillHoles类向场景中绘制钻孔集,CSolid类向场景中绘制工程地质三维实体。这些类的部分属性和行为见表1。
表1 工程地质剖切类
下面以C#为面向对象语言,给出上表1四个类的部分代码实现。
1)CDrillHoles(钻孔集合类)
Public class CDrillHoles
{
Private _DrillHole;∥定义钻孔
Public void Add()
{
∥向钻孔集中添加钻孔
}
Public void Delete()
{
∥从钻孔集中删除钻孔
}
Public int Count()
{
∥统计钻孔集中的钻孔数量
}
public CdrillHole CreateVisualDrillHole()
{
∥生成虚拟钻孔
}
}
2)CPlane(剖切平面类)
Public class CPlane
{
Private _StartPoint;∥定义剖切平面起始位置
Private _EndPoint;∥定义剖切平面终止位置
Public CSolid Cut()
{
∥由剖切平面剖切三维实体
}
}
3)CSolid(工程地质三维实体类)
Public class CSolid
{
Private _Tins;∥定义三维实体的上下层面Tins
Private _Surface;∥定义三维实体的边界面
}
4)OpenGLSense(图形输出类)
Public class OpenGLSense
{
Private _DrillHoles;∥定义钻孔输出类
Private _Solid;∥定义三维实体输出类
Public Void Initialize()
{
∥ 初始化OpenGL
}
Public Void Render()
{
∥ 设置OpenGL场景
}
Public Void SetCameraView()
{
∥ 设置OpenGL相机位置
}
}
应用本文方法对杭州某区工程地质模型进行了三维剖切分析。研究区位于钱塘江北岸冲积区,面积约为60 km2,共收集该区具有代表性的典型钻孔46个,研究区钻孔揭示地层属典型第四纪沉积环境,没有断层、褶皱等特殊构造地质发育,共出现10个大层27个亚层,如下表2。以这27个互异地层的层位关系建立该区的标准地层层序表。
根据收集到的该区钻孔数据,和前文第二节所述方法构建该区工程地质三维实体模型,如图8(a),图中所示黑线为剖切平面在xoy平面投影,即在此位置对工程地质三维实体进行剖切。剖切过程如前文第三节所述:①定义并生成剖面类和钻孔集类,依剖切平面位置将钻孔集拆分为两部分;②定在剖切平面与层面TIN相交处生成虚拟钻孔;③将虚拟钻孔加入拆分的两部分钻孔中分别构成钻孔集;④定义并生成地质实体类和图形输出类,分别构建剖切后的工程地质三维实体并在OpenGL场景中输出,如图8(b),剖面图如图8(c)。
表2 研究区标准地层层序表
图8 杭州某地区工程地质模型三维剖切分析
1)基于虚拟钻孔的工程地质三维剖切方法计算量少,原理简单,易于编程实现,可以很好的满足层状地质结构实际应用的需要。鉴于地质现象的高度复杂性和多解性,该方法对地质构造活动强烈、扭曲变形严重的地层三维剖面效果较差,且未考虑复杂地质构造,如侵入体、透镜体、复杂褶皱等的影响与作用,因此仍需随着实际应用的深入而逐步完善。
2)采用面向对象程序设计思想进行工程地质三维剖切分析,其对象及类的概念接近工程实际,本文基于OOP技术,对其在工程地质三维剖切中的应用进行了探讨和分析,并给出了具体实现,可为工程地质分析提供另一条途径。
[1] 党曾明,胡建平.基于钻孔数据的三维地层建模软件的实现[J].天津城市建设学院学报,2008, 14(1): 60-63.
[2] Wulixin. Topological Relations Embodied in a Generalized Triprism(GTP)Model for a 3D Geosciences Modeling System[J]. Computers and Geosciences,2004, 30(4): 405-418.
[3] Gong Jianya,Cheng Penggen,Wang Yandong. Three-dimensional modeling and application in geological exploration engineering[J]. Computers and Geosciences,2004, 30(4): 391-404.
[4] 赵德君,王宝军.任意地质图剖面生成的方法探讨[J].西部探矿工程,2005(106): 91-92.
[5] 陈俊智,侯克鹏.利用OpenGL对岩体三维模型进行切剖面方法研究[J].云南冶金,2005, 34(1): 12-15.
[6] Coad P Y E. Object-Oriented Analysis[M]. New York: Yourdon Press, 1992.
[7] 周翠英,董立国,刘祚秋,等.OpenGL三维地层切割面的实现技术[J].土木工程学报,2006, 39(2): 35-61.
[8] 张渭军,王文科.基于钻孔数据的地层三维建模与可视化研究[J].大地构造与成矿学,2006, 30(1): 108-113.
[9] 陶海冰,蒋蓓.基于钻孔数据的栅格法模拟三维土层研究[J].杭州师范大学学报,2008, 6(7): 469-474.
[10] 明镜,潘懋,曲红刚,等.基于TIN数据三维地质体的折剖面切割算法[J]. 地理与地理信息科学,2008, 24(3): 37-41.
[11] 梁师俊.岩土工程勘察数字化技术与实现[D]. 杭州:浙江工业大学, 2006.