巷道建模

如题所述

在巷道设计中,轴线设计和断面设计是两个最为重要的内容,两者相互联系也相对独立——轴线决定巷道的几何走向,断面体现巷道的功能。巷道的轴线通常有直线或弧线两种,常用的断面形式为半圆拱(巷道断面)或圆形(竖井断面)。在三维可视化平台下,通过提取必要的数据,采用自动或交互的方法,实现三维巷道模型建立。考虑到巷道模型本身比较规则,构造实体几何(Constructive Solid Geometry,CSG)(孙家广,1998)法是很好的选择。

6.4.2.1 巷道实体模型的生成

巷道建模步骤如下:①根据轴线类型是直线段还是圆弧段,确定巷道设计轴线。②提取断面参数数据,根据需要建立旋转矩阵和平移矩阵,将断面轮廓移动到轴线的合理位置处(图6.3)。③将断面轮廓沿着轴线方向进行拖拉,即可得到三维巷道的实体模型。分别由内轮廓和外轮廓拖拉得到的三维实体模型,进行布尔减法操作即可得到一个有厚度的三维巷道模型,如图6.4所示。

图6.3 巷道断面和轴线示意图

a.断面模型;b.经过旋转和平移后,将断面置于圆弧形轴线一端的外法线方向上

图6.4 由布尔运算得到的巷道模型

6.4.2.2 巷道模型—轴线—断面连接

由于巷道是一个经过复杂几何变换和布尔运算得到的复杂的三维实体,对巷道进行空间分析时,直接参与空间计算分析是相当复杂的,需要找到一种间接的方式。巷道轴线因为形式简单,采用参数方程表达非常方便,因此,可以事先建立巷道实体模型与轴线之间的一一对应连接关系,通过轴线参与空间分析计算。在采用C++程序设计时,采用map映射类建立轴线(Axis)与实体(Entity)之间的连接关系,从而可以由实体找到对应的轴线,反之,可以由轴线查找到对应的实体。其中,对象ObjectId是表示图元的唯一ID编号。方法Link()实现了map对象myAxisEntityMap(轴线—实体映射)和myEntity-AxisMap(实体—轴线映射)连接关系的存储。而函数GetEntityID和GetAxisID则分别为由已知对象得到相关联对象的ID编号。采用面向对象的程序设计方法,类的定义如下:

class EntityAxisLink

{

public:

int Link(const ObjectId&aAxisID,ObjectId& aEntityID);

int GetEntityID(const ObjectId&aAxisID,ObjectId&aEntityID)const;

int GetAxisID(const ObjectId&aEntityID,ObjectId&aAxisID)const;

int RemoveLink(ObjectId&aAxisID,ObjectId&aEntityID);

void clear();

protected:

std::map<ObjectId,ObjectId>myAxisEntityMap;

std::map<ObjectId,ObjectId>myEntityAxisMap;

};

轴线—断面连接则是通过数据库系统获取的,每一轴线都有其唯一对应的断面编号ID,根据该ID可以到数据库中取得相应的断面参数。

温馨提示:答案为网友推荐,仅供参考