一种基于距离优先和时空相关性的碰撞检测方法

文档序号:6626152阅读:358来源:国知局
一种基于距离优先和时空相关性的碰撞检测方法
【专利摘要】本发明公开了一种基于距离优先和时空相关性的碰撞检测方法,其首先对待检测对象构造对应的方向包围盒,构建相应的层次包围盒树;遍历上述层次包围盒树,在对所述包围盒进行遍历的过程中:首先将所述包围盒各自对应的根节点作为初始节点进行第一次遍历,记录上述包围盒中的不相交的节点,并将所述节点记录到跟踪表中;当再次进行遍历时直接从跟踪表中记录的不相交的节点进行遍历,且在再次遍历的过程中需要对跟踪表进行基于距离优先和时空相关性的更新策略。本发明首先遍历距离比较近的包围盒,寻找最佳路径,减少遍历包围盒的数目,提高了碰撞检测的效率;并提出跟踪表采用堆来保存,加快了碰撞检测的效率。
【专利说明】一种基于距离优先和时空相关性的碰撞检测方法

【技术领域】
[0001]本发明属于碰撞检测领域,尤其涉及基于方向包围盒的碰撞检测方法,并且引入距离优先思想和时空相关性方法。

【背景技术】
[0002]碰撞检测方法在计算几何,计算机动画,仿真机器人和虚拟现实等领域都有较好的应用前景。
[0003]近几十年来国内外研究人员对碰撞检测进行了广泛而深入的研究,已经成熟并且被广泛应用的方法有空间分解法和层次包围盒方法。空间分解法是将整个虚拟空间划分成相等体积小的单元,只对占据了同一单元和相邻单元格的几何对象进行相交测试,比较典型的例子有均匀网格,k-d树,八叉树,BSP树。空间分解法通常适用于稀疏环境中分布比较均匀的几何对象间的碰撞检测;层次包围盒法是碰撞检测算法中广泛使用的一种方法,基本思想是用体积略大的几何特征简单包围盒来近似地描述复杂几何对象,通过树状的层次结构逼近几何模型,直到几乎完全获得对象的几何特征,从而只需对包围盒重叠的部分进行进一步的相交测试,典型的方法有AABB,包围球,方向包围盒OBB,k-DOPs。
[0004]OBB包围盒因其具有紧密的包裹性,对包围盒进行更新时只需要进行简单的选择平移操作等优点被广泛使用。但是OBB包围盒也具有一定的缺陷,在遍历OBB包围盒树的过程中需要进行包围盒相交测试和三角形相交测试,如果OBB重叠,则需要进行15次测试,那么在进行OBB包围盒树的遍历过程中就需要进行大量的基于包围盒的相交测试,影响计算效率。


【发明内容】

[0005]鉴于已有技术存在的缺陷,本发明的目的是要提供一种新型的碰撞检测方法,本方法引入基于距离优先和时空相关性思想,可有效减小包围盒相交测试的数目,加快碰撞检测的效率,继而提闻了算法的效率。
[0006]为了实现上述目的,本发明的技术方案:
[0007]一种基于距离优先和时空相关性的碰撞检测方法,其特征在于:
[0008]1、首先对待检测对象构造对应的方向包围盒,进而构建相应的层次包围盒树;
[0009]i1、遍历上述层次包围盒树,检测待检测对象对应的当前的包围盒是否相交,在对所述包围盒进行遍历的过程中:首先将所述包围盒各自对应的根节点作为初始节点进行第一次遍历,在进行第一次遍历时,记录上述包围盒中的不相交的节点,并将所述节点记录到跟踪表中;当再次进行遍历时直接从跟踪表中记录的不相交的节点进行遍历,且在再次遍历的过程中需要对跟踪表进行基于距离优先和时空相关性的更新策略。
[0010]所述的跟踪表基于距离优先和时空相关性的更新策略包括:跟踪表初始化过程以及跟踪表优化过程:
[0011 ] 所述的跟踪表初始化过程为:
[0012]设vT为跟踪表中第一个标记节点,vF为活动对象根节点
[0013](8)若vT不空,则判断vT的包围盒和vF的包围盒是否相交,若相交进入⑵判断,若不相交,则进入(5);
[0014](9)如果上述两个包围盒相交,则判断vT是否为叶节点,如果是叶节点,则进入
(3)判断,否则进入⑷;
[0015](10)如果vT是叶节点,则遍历vT相应的包围盒树;
[0016](11)如果vT不是叶节点,贝U删除这个节点,向下更新,即对于vT的每个子节点判断前一时刻与vF不相交的内部节点在当前时刻是否与vF相交,若相交,则从跟踪表中插入此节点,产生新的标记节点;
[0017](12)提取跟踪表的下一节点νΝ,判断vN和vT是否为兄弟节点。如果vN和vT是兄弟节点,则判断vN的包围盒和vF的包围盒是否相交;
[0018](13)如果vN的包围盒和vF的包围盒不相交,则从跟踪表中删除vT和νΝ,将vT和νΝ父节点加入当前相应的位置;
[0019](14) vT指向下一节点,直到遍历完成整个跟踪表的更新初始化过程;
[0020]所述的跟踪表优化过程是指:初始化过程之后,基于距离优先的准则,按照距离的远近由近到远对上述跟踪表中的节点进行排序,其中所述的距离是指系统环境中待检测对象的空间位移,即待检测对象的时空相关性,在进行下次遍历时,根据跟踪表中按照距离进行排序的节点对对应的包围盒进行遍历,并实时更新跟踪表。
[0021 ] 进一步的,所述跟踪表的存储方式是二叉堆存储方式。
[0022]进一步的,所述遍历采用基于距离优先和时空相关性的跟踪表优化的前提条件是系统环境中待检测对象的其各自对应的包围盒的距离小于一定阈值。
[0023]进一步的,所述方法还包括设定跟踪表的最大长度,当跟踪表的长度大于当前系统预设的超限值时,不使用本文提出的优化算法,直接采用二叉树遍历策略。
[0024]进一步的,基于上述方法在进行待测对象精确相交测试之前,即在遍历上述跟踪表之后,找到两个需要遍历的包围盒后,首先利用预处理方法对待检测对象对应的包围盒进行是否相交的初步检测,从而避免了复杂检测的方法,提高了效率;
[0025]所述利用预处理方法包括如下步骤:
[0026]首先通过层次遍历,找到需要检测对象对应的两个包围盒,分别以两个包围盒各自中心点作为球心,分别计算两个包围盒的最远顶点与对应的球心的距离得到两个包围盒各自的大球的半径,记为rl,r2 ;相应的分别以两个包围盒各自中心点作为球心,分别计算两个包围盒的最近顶点与对应的球心的距离得到两个包围盒各自的小球的半径,记为rminl, rmin2 ;
[0027]其次判断两个包围盒之间的距离re与大球半径之和、小球半径之和的关系:当两个包围盒之间的距离re大于大球半径之和时,则上述包围盒不会相交,返回包围盒相交测试的结果;当上述包围盒之间的距离小于小球半径之和时则上述包围盒一定会相交,同理返回上述包围盒相交测试的结果,不再进行分离轴测试;当两个上述包围盒之间的距离re位于大球半径之和与小球半径之和之间时,利用分离轴的方法进行检测。
[0028]其中计算两个包围盒的距离re的公式如下,因为包围盒在不同的坐标系下,所以需要将两个包围盒转换到相同坐标系下才能进行计算,因为算法需要计算根号,为了保证算法的正确性,在计算re时加入一定的弥补因子,保证算法的强健性,

【权利要求】
1.一种基于距离优先和时空相关性的碰撞检测方法,其特征在于: 1.首先对待检测对象构造对应的方向包围盒,进而构建相应的层次包围盒树; i1、遍历上述层次包围盒树,检测待检测对象对应的当前的包围盒是否相交,在对所述包围盒进行遍历的过程中:首先将所述包围盒各自对应的根节点作为初始节点进行第一次遍历,在进行第一次遍历时,记录上述包围盒中的不相交的节点,并将所述节点记录到跟踪表中;当再次进行遍历时直接从跟踪表中记录的不相交的节点进行遍历,且在再次遍历的过程中需要对跟踪表进行基于距离优先和时空相关性的更新策略。
2.根据权利要求1所述的基于距离优先和时空相关性的碰撞检测方法,其特征在于:所述的跟踪表基于距离优先和时空相关性的更新策略包括:跟踪表初始化过程以及跟踪表优化过程: 所述的跟踪表初始化过程为: 设vT为跟踪表中第一个标记节点,vF为活动对象根节点 (1)若vT不空,则判断vT的包围盒和vF的包围盒是否相交,若相交进入⑵判断,若不相交,则进入(5); (2)如果上述两个包围盒相交,则判断vT是否为叶节点,如果是叶节点,则进入(3)判断,否则进入⑷; (3)如果vT是叶节点,则遍历vT相应的包围盒; (4)如果vT不是叶节点,贝U删除这个节点,向下更新,即对于vT的每个子节点判断前一时刻与vF不相交的内部节点在当前时刻是否与vF相交,若相交,贝U从跟踪表中插入此节点,产生新的标记节点; (5)提取跟踪表的下一节点vN,判断vN和vT是否为兄弟节点。如果vN和vT是兄弟节点,则判断vN的包围盒和vF的包围盒是否相交; (6)如果vN的包围盒和vF的包围盒不相交,则从跟踪表中删除vT和vN,将vT和vN父节点加入当前位置; (7)vT指向下一节点,直到遍历完成整个跟踪表的更新初始化过程; 所述的跟踪表优化过程是指:初始化过程之后,基于距离优先的准则,按照距离由近到远对上述跟踪表中的节点进行排序,其中所述的距离是指系统环境中待检测对象的空间位移,即待检测对象的时空相关性,在进行下次遍历时,根据跟踪表中按照距离进行排序的节点对对应的包围盒进行遍历,并实时更新跟踪表。
3.根据权利要求2所述的基于距离优先和时空相关性的碰撞检测方法,其特征在于:所述跟踪表的存储方式是二叉堆存储方式。
4.根据权利要求2所述的基于距离优先和时空相关性的碰撞检测方法,其特征在于:所述遍历采用基于距离优先和时空相关性的跟踪表优化的前提条件是系统环境中待检测对象的其各自对应的包围盒的距离小于一定阈值。
5.根据权利要求2所述的基于距离优先和时空相关性的碰撞检测方法,其特征在于:所述方法还包括设定跟踪表的最大长度,当跟踪表的长度大于当前系统预设的超限值时,不使用本文提出的优化算法,直接采用二叉树遍历策略。
6.根据权利要求1所述的基于距离优先和时空相关性的碰撞检测方法,其特征在于:基于上述方法在进行待测对象精确相交测试之前,即在遍历上述跟踪表之后,找到两个需要遍历的包围盒后,首先利用预处理方法对待检测对象对应的包围盒进行是否相交的初步检测; 所述利用预处理方法包括如下步骤: 首先通过层次遍历,找到需要检测对象对应的两个包围盒,分别以两个包围盒各自中心点作为球心,分别计算两个包围盒的最远顶点与对应的球心的距离得到两个包围盒各自的大球的半径,记为rl,r2 ;相应的分别以两个包围盒各自中心点作为球心,分别计算两个包围盒的最近顶点与对应的球心的距离得到两个包围盒各自的小球的半径,记为rminl,rmin2 ; 其次判断两个包围盒之间的距离re与大球半径之和、小球半径之和的关系:当两个包围盒之间的距离re大于大球半径之和时,则上述包围盒不会相交,返回包围盒相交测试的结果;当上述包围盒之间的距离小于小球半径之和时则上述包围盒一定会相交,同理返回上述包围盒相交测试的结果,不再进行分离轴测试;当两个上述包围盒之间的距离re位于大球半径之和与小球半径之和之间时,利用分离轴的方法进行检测; 其中计算两个包围盒的距离re的公式如下,因为包围盒在不同的坐标系下,所以需要将两个包围盒转换到相同坐标系下才能进行计算,因为算法需要计算根号,为了保证算法的正确性,在计算re时加入一定的弥补因子,保证算法的强健性, re = ^Jix1 — x2)2 +Cy1 -y2)~ +Ui — A)2 +ε(I) 其中点(XDy1J1)和点(x2,y2,z2)分别表示将两个球转换至同一坐标系下的原点坐标,ε表示弥补因子; 将两个球坐标系原点转换至一个坐标系的公式如下:
P(2)R(2->1)+T(2->1) = P(I) (2) 其中P(2)表示图中第二个包围盒的坐标原点,R(2-m)和T(D1)分别表示由第二个坐标系到第一个坐标系的旋转矩阵和平移矩阵,Ρω表示将第二个坐标系中的P⑵点转换至第一个坐标系中的点。
【文档编号】G06F17/50GK104200031SQ201410450418
【公开日】2014年12月10日 申请日期:2014年9月4日 优先权日:2014年9月4日
【发明者】张强, 满冉冉, 周东生, 魏小鹏 申请人:大连大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1