一种基于包围盒树的碰撞检测方法

文档序号:6353973阅读:429来源:国知局
专利名称:一种基于包围盒树的碰撞检测方法
技术领域
本 发明涉及碰撞检测方法,特别是涉及一种基于包围盒树的碰撞检测方法。
背景技术
碰撞问题多年来一直受到较多的关注,碰撞检测方法在计算几何、计算机动画、 CAD/CAM,仿真机器人和虚拟现实等领域中都有较好的应用前景。近二十多年来,研究人员在碰撞检测领域中做了相当多的有意义的工作,提出一些较为成熟的方法,总体上将这些方法分为两大类几何分解法和分层包围盒法。前者是将整个虚拟空间划分为相等体积的小的单元格,只对占居了同一单元格或相邻单元格的几何对象进行相交计算。比较典型的例子有八叉树、k-d树、BSP树等。这类方法的特点为方法复杂、精度高。分层包围盒的核心思想是用体积略大而几何特性简单的包围盒来近似地描述复杂的几何对象,从而通过判断包围盒是否重叠来粗略估计两检测对象是否碰撞,此外可以通过构造树状分层结构一步步逼近几何模型,提高检测精度。分层包围盒由于其方法简单、效率相对高,成为一种被广泛应用的碰撞检测方法。但现有的动态碰撞检测方法还存在一些问题,如检测中会发生刺穿和遗漏等。另夕卜,传统的多物体间的碰撞检测方法一般时间复杂度为0(ri2),不能满足实时性的要求,不利于碰撞检测快速实现。基于空间分割技术的几何分解方法由于分区数目较难把握,效率不高。八叉树和其它几何模型在解决碰撞检测的框架之间的几何干涉问题时,也不会大幅度提高效率。尽管也可以采用分层包围盒技术来加速物体场景的碰撞检测,但一般的包围盒方法作为一个整体方法,检测精度低,效率提高并不明显。

发明内容
本发明的目的在于克服现有技术的不足,提供一种快速的基于包围盒树的碰撞检测方法。为达到上述目的,本发明采用如下技术方案本发明首先提供一种基于包围盒树的碰撞检测方法,从树根部出发向树枝最末端检测,包含如下步骤步骤a 建立两个物体的包围盒树;该步骤a具体包含步骤al 建立整个物体的包围盒,该包围盒作为该物体的包围盒树的根节点;步骤a2 利用与局部坐标轴垂直的平面将上述包围盒划分成两个子包围盒以形成根节点的两个子节点,当所有子节点包含的基本几何元素个数少于预先给定的叶节点所包含几何元素个数的最小值时,转向步骤b,否则转向步骤a3;步骤a3 对步骤a2中得到的两个子节点分别递归地执行上述包围盒的分割过程, 当递归深度超过了预先给定的最大树深度时,转向步骤b,否则继续执向步骤a2 ;步骤b 取所述两个物体的包围盒树的当前结点两两之间进行检测,判断是否发生碰撞,若发生碰撞,转向步骤c,若没碰撞,转向步骤d ;
步骤c 判断当前结点是否为叶子结点,若是,进行精确检测确定是否真的发生碰撞,并根据检测结果更新包含“最近距离”,“速度”,“是否碰撞”在内的节点信息,并记录“最近距离”在搜索树中的路径,记下该结点,返回;若不是叶子结点,则取它所有子结点作为该树的当前结点,递归执行步骤b ;步骤d:如果当前结点没有未检测的兄弟结点,表明没发生碰撞,则计算包含“最近距离”,“速度”,“是否碰撞”在内的节点信息,记下当前结点后,返回;如果还有未检测的兄弟结点,则依次将下兄弟结点作为该树的当前结点,递归执行步骤b。进一步地,所述步骤b中,对当前结点两两之间进行检测时,系统可以根据优先级链表的次序,依次检测物体两两间的碰撞情况,该优先级链表根据优先级函数P获得,该优先级函数P如下
权利要求
1.一种基于包围盒树的碰撞检测方法,从树根部出发向树枝最末端检测,其特征在于, 该方法包含如下步骤步骤a 建立两个物体的包围盒树;该步骤a具体包含 步骤al 建立整个物体的包围盒,该包围盒作为该物体的包围盒树的根节点; 步骤a2 利用与局部坐标轴垂直的平面将上述包围盒划分成两个子包围盒以形成根节点的两个子节点,当所有子节点包含的基本几何元素个数少于预先给定的叶节点所包含几何元素个数的最小值时,转向步骤b,否则转向步骤a3 ;步骤a3 对步骤a2中得到的两个子节点分别递归地执行上述包围盒的分割过程,当递归深度超过了预先给定的最大树深度时,转向步骤b,否则继续执向步骤a2 ;步骤b:取所述两个物体的包围盒树的当前结点两两之间进行检测,判断是否发生碰撞,若发生碰撞,转向步骤c,若没碰撞,转向步骤d ;步骤c 判断当前结点是否为叶子结点,若是,进行精确检测确定是否真的发生碰撞, 并根据检测结果更新包含“最近距离”,“速度”,“是否碰撞”在内的节点信息,并记录“最近距离”在搜索树中的路径,记下该结点,返回;若不是叶子结点,则取它所有子结点作为该树的当前结点,递归执行步骤b;步骤d:如果当前结点没有未检测的兄弟结点,表明没发生碰撞,则计算包含“最近距离”,“速度”,“是否碰撞”在内的节点信息,记下当前结点后,返回;如果还有未检测的兄弟结点,则依次将下兄弟结点作为该树的当前结点,递归执行步骤b。
2.根据权利要求1所述的基于包围盒树的碰撞检测方法,其特征在于,所述步骤b中, 对当前结点两两之间进行检测时,系统是根据优先级链表的次序,依次检测物体两两间的碰撞情况,该优先级链表根据优先级函数P获得,该优先级函数P如下
3.根据权利要求2所述的基于包围盒树的碰撞检测方法,其特征在于,当P小于预定值时放弃该节点的检测,并通过计数器C记录该节点被放弃检测的次数,若计数器C超过了预设值,则系统检测该节点,并将计数器清零。
4.一种基于包围盒树的碰撞检测方法,从树枝最末端出发向树根部检测,其特征在于, 该方法包含如下步骤步骤e 建立两个物体的包围盒树;该步骤e具体包含 步骤el 建立整个物体的包围盒,该包围盒作为该物体的包围盒树的根节点; 步骤e2 利用与局部坐标轴垂直的平面将上述包围盒划分成两个子包围盒以形成根节点的两个子节点,当所有子节点包含的基本几何元素个数少于预先给定的叶节点所包含几何元素个数的最小值时,转向步骤f,否则转向步骤e3 ; 步骤e3 对步骤e2中得到的两个子节点分别递归地执行上述包围盒的分割过程,当递归深度超过了预先给定的最大树深度时,转向步骤f,否则继续执向步骤e2 ; 步骤f 将已经检测到发生碰撞的结点,作为当前结点;步骤g 检测当前结点是否发生碰撞,如发生,则方法结束返回,若没碰撞,转向步骤h ; 步骤h 对当前节点的兄弟节点进行碰撞检测,若发生碰撞,则方法结束;若未发生碰撞,则将父节点作为当前节点,进入包围盒树的更高一层,并转入步骤g。
5.根据权利要求4所述的基于包围盒树的碰撞检测方法,其特征在于,所述步骤g中, 对当前结点两两之间进行检测时,系统是根据优先级链表的次序,依次检测物体两两间的碰撞情况,该优先级链表根据优先级函数P获得,该优先级函数P如下
6.根据权利要求5所述的基于包围盒树的碰撞检测方法,其特征在于,当P小于预定值时放弃该节点的检测,并通过计数器C记录该节点被放弃检测的次数,若计数器C超过了预设值,则系统检测该节点,并将计数器清零。
7.根据权利要求6所述的基于包围盒树的碰撞检测方法,其特征在于,物体的树根部的根节点具有超时计数器Cr,每对该物体进行一次自下而上的搜索就将计数器Cr的值加一,若计数器Cr的值超过预设的定值,就对该物体进行权利要求1-3任一项所述的方法。
8.一种基于包围盒树的碰撞检测方法,从树枝最末端出发向树根部检测,其特征在于, 该方法包含如下步骤步骤i 将根据权利要求1-3任一项所述的方法生成的“最近距离”路径,在两物体的最底层选择具有“最近距离”的两节点作为当前节点;步骤j 检测当前结点是否发生碰撞,如发生,则返回,若没碰撞,转向步骤i ; 步骤k:对当前节点的兄弟节点进行碰撞检测,若发生碰撞,则方法结束;若未发生碰撞,则将父节点作为当前节点,进入包围盒树的更高一层,并转入步骤j。
9.根据权利要求8所述的基于包围盒树的碰撞检测方法,其特征在于,所述步骤j中, 对当前结点两两之间进行检测时,系统是根据优先级链表的次序,依次检测物体两两间的碰撞情况,该优先级链表根据优先级函数P获得,该优先级函数P如下
10.根据权利要求9所述的基于包围盒树的碰撞检测方法,其特征在于,当P小于预定值时放弃该节点的检测,并通过计数器C记录该节点被放弃检测的次数,若计数器C超过了预设值,则系统检测该节点,并将计数器清零。
11.根据权利要求10所述的基于包围盒树的碰撞检测方法,其特征在于,物体的树根部的根节点具有超时计数器Cr,每对该物体进行一次自下而上的搜索就将计数器Cr的值加一,若计数器Cr的值超过预设的定值,就对该物体进行权利要求1-3任一项所述的方法。
全文摘要
本发明提供一种基于包围盒树的碰撞检测方法,从树根部出发向树枝最末端检测,该方法包含步骤a建立两个物体的包围盒树;步骤b取两个物体的包围盒树的当前结点两两之间进行检测,判断是否发生碰撞,若发生碰撞,转向步骤c,否则,转向步骤d;步骤c判断当前结点是否为叶子结点,若是,记下该结点,返回,并进行精确检确定是否真的发生碰撞。否则,取它所有子结点作为该树的当前结点,递归执行步骤b;步骤d如果当前结点没有未检测的兄弟结点,则计算包含“最近距离”,“速度”,“是否碰撞”在内的节点信息,记下当前结点,返回;否则依次将下个兄弟结点作为该树的当前结点,递归执行步骤b。本发明还提供一种从树枝最末端出发向树根部检测的方法。
文档编号G06F11/00GK102446122SQ20111043379
公开日2012年5月9日 申请日期2011年12月21日 优先权日2011年12月21日
发明者熊玉梅 申请人:上海电机学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1