Research and Application of Collision Detection Technology on the 3D Model of Steel Structure
-
摘要: 针对钢结构详图设计软件中构件连接之间相互碰撞以及螺栓安装预留安装空间问题,研究了如何快速有效地进行钢结构详图软件中三维模型碰撞检测,从而对构件、节点安装模型进行合理性检验。本文基于包围盒的思想,按照一定的规律提取三维空间物体几何数据,通过矢量法进行了物体之间空间相互位置关系判断,有效地解决了这一问题,编制了钢结构详图设计STXT软件碰撞检测及螺栓安放合理性检验模块。Abstract: In the detail structural steelwork, according to the problem of components in connection crashing at each other and the problem of the enough space of bolt installation, the paper expounds how to apply collision detection technology on steel structure designing software fast and effectively and then carries out reasonable test on component and node installation model. Based on bounding box and geometric data of objects in three-dimensional space obtained according to a certain rule, the paper deals with mutual relationship between spatial objects in the vector method and effectively solves the problem as well as finally programming collision detection model and bolt installation space test in the designing software of detail structural steelwork (STXT).
-
Keywords:
- Collision Detection /
- Bounding Box /
- Vector method /
- STXT Software
-
1. 前言
在钢结构详图设计软件中,构件及零件加工详图都是由三维模型直接产生,直接用于指导加工生产。建立的模型及连接节点是否合理,零件之间是否相互碰撞或螺栓安装是否留有足够的空间,都需要在节点连接创建时综合考虑,避免在安装加工时安装难度大或不合理碰撞情况。由于钢结构三维模型规模庞大,节点构造复杂,设计人员难以通过人工查看来发现模型中不合理的连接,需要详图设计软件提供一个自动模型碰撞检测和安装合理性检验的功能。
如何能够对钢结构三维模型进行既快速简单又准确有效的碰撞检测,是关键的问题。本文基于包围盒思想,用矢量法对外轮廓优先检测,各类边界相交区分处理的方式,编制了实现程序,快速有效的对模型进行了碰撞检测,并在钢结构详图设计软件STXT中进行了应用。
2. 碰撞检测的实现方法
碰撞检测实现的流程见图 1,首先进行包围盒的有效检测,只有包围盒有交集的物体才有可能相交。然后对轮廓线和轮廓面进行求交检验,如果一个物体的轮廓线和另一物体的轮廓直接在内部相交,那么这两个物体肯定相交。如果只在边界处相交,还需要进一步进行边界相交检测。如果两个物体没有直接的交点,则进入是否完全包含检测。
2.1 几何数据描述
我们知道三维实体都是由若干轮廓面组成,按照实际的需要把轮廓面按可见面的原则提取出面数据,面上所包含的孔面信息要紧随附属的面数据存储,便于提取使用和判断。轮廓面由若干轮廓线组成,轮廓线的组成顺序应该是绕可见面法向逆时针方向,每个线段有两个端点,我们把这些轮廓线和顶点数据也都提取出来。给每个物体建立一个这样的类对象,用来管理它的几何数据,建立的每个实体都具有一系列的顶点、外轮廓线及外轮廓面数据。
2.2 包围盒判断
在三维实体几何数据包围盒的设置上有很多方法[1],我们这里选择用矩形包围盒方式,它描述简单,使用方便,判断效率高。我们对每个实体对象的顶点遍历,分别用他们坐标在x,y,z上的最大值来修正包围盒大小,为每个一个实体建立一个最小的矩形包围盒。
物体如果有相交,那么它们的包围盒也一定会相交,我们只要判断一下他们在角点上的坐标是否有交集的可能,就可以把完全没有可能相交的情况优先判断出去,这个方法思路明确,操作简单,提高了检测效率。
2.3 线面求交
如果两个物体的包围盒检测有效,那么我们就需要进一步进行判断,软件采用优先外轮廓相交检测来快速判断。把物体的轮廓线和另一物体的轮廓面求交,如果交点在轮廓线段中间并同时在轮廓多边形的内部,那么两各物体必然有碰撞。需要综合考虑孔面的负影响,即如果线和轮廓面相交,同时也和它附加的孔面相交,那么孔相交的点要负作用在有效交点的累加上。
1) 空间线面求交
我们知道空间点到面的距离公式为AX + BY + CZ + D,可分别求出直线上两点到面的距离,如果距离均为零或者相等,说明直线与面重合或者平行; 如果一端等于零,说明直线与面在端点相交; 如果一正一负说明线段与面在线段内部相交。如果交点在线段内,那么有可能符合线段和面多边形相交的判断,需要进一步判断交点与面多边形的关系。线段交点的具体位置可以用比例法求出。
2) 三维相对平面的简化
在三维中直接判断点与空间多边形的关系比较麻烦,我们对它进行平面简化,找出多边形法向量相对与XOY、XOZ、YOZ面夹角最大的一个作为转换投影面,把多边形及交点相对该面简单投影,那么复杂的三维空间问题就变成平面问题了,再通过比较平面上点与多边形关系就相对简单了。
3) 扫描线法判断点与面的关系
扫描线法是判断点与多边形位置关系的常用方法[2],即由该点做一个射线,以沿X轴方向为例,依次与多边形各边求交,如果点在多边形内,那么它与该多边形的有效交点数为奇数。需要注意的是在射线与多边形顶点相交时,对有效相交点的判断,因为该方法使用比较普遍,此处不再作赘述。
2.4 边界判断
用矢量法检测,最繁琐的地方就是边界问题上的处理,两个物体在轮廓上没有直接的内部交点,只有在边界上有交点,那么需要进一步判断边界相交的情况,虽然物体在轮廓边界上相交的情况非常复杂,但是归纳起来可以分为以下几类来处理:
1) 点面边界
两物体没有外轮廓面共面的情况,只有一个物体的顶点落在另一个物体轮廓面内的情况,那么如果交点在轮廓面多边形内,只要判断轮廓线方向与可见面法向是否广义同向,如果广义同向说明线段与轮廓面在物体外面相临,否则即为相交。
2) 点线边界
两物体有共面,在面内有一个物体的顶点落在另一个物体轮廓面的多边形边上,如果是落在轮廓线段内,那么我们需要判断连接该顶点的线段是否在多边形内即可,因为多边形的轮廓线都是按逆时针顺序排列,所以只要判断线段是否在轮廓面法向和轮廓线方向叉乘所得向量的广义同向即可。
如果只在顶点相交,如图 2所示,那么只需要选择一个多边形的起始边v11绕法向对v1,v2,v22线段求夹角,如果它和另一多边形的两个线段v1、v2夹角都小于和自己下一边v22的夹角,那么它们只是在外部相交,否则为内部相交。
3) 线线边界
两物体有共面,同时有轮廓线重合,如图 3所示,Vn即为物体1与物体3共线边向里的法向量,如果物体3与该线相交的线与Vn广义同向,那么物体3与物体1相交。通过这一规则,我们便能判断出物体2和物体1不相交。
2.5 包含判断
对一个物体的顶点循环判断和另一个物体的关系,只要其中任何一个顶点被判断成包含在另一物体内,即可判断是相交。点是否包含在物体内的分析方法类似点和多边形关系的判断,也可以沿一个方向做一个射线,循环对另一个物体的轮廓面求交,如果点在物体内部,那么最后的交点一定是奇数。此处也需要考虑和轮廓面点线处相交时,有效交点的判断,同时要综合考虑孔面的附加影响。
3. 在详图软件STXT中的应用
在详图设计软件中,梁与柱从不同方向进行连接、支撑与柱连接等都在一个节点上完成,更为复杂的连接可能通过自定义创建,对模型的操作可能先后反复进行,在连接建立过程或者完成后,检测模型中是否存在零件碰撞或无法安装的问题,零件是否有重合、是否有交叉,同时螺栓预留安装操作空间与其他螺栓或零件布置位置是否冲突等,是设计人员关心的问题,并且难以用人为观察发现和检测,需要程序能够自动进行碰撞检测和安装空间冲突检测。
笔者基于该方法编制了STXT零件碰撞检测和螺栓安装空间冲突检测模块,零、构件碰撞检测可分按选择集、构件、节点、交互选择零件检测; 螺栓合理安装检测,螺栓冲突设置界面中可设置螺栓预留可进行安装操作的空间设置,分别进行螺栓和零件检测、螺栓与螺栓安装空间检测。
图 4为一个单层框架结构模型,一个次梁端部连接没有处理,当进行碰撞检测时候,碰撞的零件会在图形中高亮显示,同时会弹出碰撞信息查询对话框,记录了相互碰撞零件的ID,“可通过零件查找定位”菜单来寻找零件位置,其对话框界面如图 5所示,对应零件会亮显,方便用户对于碰撞位置的查看和处理。螺栓冲突检测可预留一定的安装空间,图 6为螺栓安装预留空间设置界面。
4. 小结
基于包围盒的矢量法判断物体碰撞的方法简单明确,包围盒有效性判断和外轮廓有效性检测,提高了检测效率。在钢结构详图设计软件STXT中编制的碰撞检测模块也对该方法进行了检验,证明了该方法的准确、快速和有效,用户可以通过方便的操作完成零件碰撞及螺栓安放位置冲突等问题的检测。
-
[1] 周培德.计算几何-算法设计与分析[M].北京:清华大学出版社, 2006. [2] Donald Hearn, M. Pauline Baker. Computer Graphics[M].北京:电子工业出版社, 1998.