CN102446122A - 一种基于包围盒树的碰撞检测方法 - Google Patents
一种基于包围盒树的碰撞检测方法 Download PDFInfo
- Publication number
- CN102446122A CN102446122A CN2011104337932A CN201110433793A CN102446122A CN 102446122 A CN102446122 A CN 102446122A CN 2011104337932 A CN2011104337932 A CN 2011104337932A CN 201110433793 A CN201110433793 A CN 201110433793A CN 102446122 A CN102446122 A CN 102446122A
- Authority
- CN
- China
- Prior art keywords
- node
- bounding box
- tree
- bcollide
- collision
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Image Analysis (AREA)
Abstract
本发明提供一种基于包围盒树的碰撞检测方法,从树根部出发向树枝最末端检测,该方法包含:步骤a:建立两个物体的包围盒树;步骤b:取两个物体的包围盒树的当前结点两两之间进行检测,判断是否发生碰撞,若发生碰撞,转向步骤c,否则,转向步骤d;步骤c:判断当前结点是否为叶子结点,若是,记下该结点,返回,并进行精确检确定是否真的发生碰撞。否则,取它所有子结点作为该树的当前结点,递归执行步骤b;步骤d:如果当前结点没有未检测的兄弟结点,则计算包含“最近距离”,“速度”,“是否碰撞”在内的节点信息,记下当前结点,返回;否则依次将下个兄弟结点作为该树的当前结点,递归执行步骤b。本发明还提供一种从树枝最末端出发向树根部检测的方法。
Description
技术领域
本发明涉及碰撞检测方法,特别是涉及一种基于包围盒树的碰撞检测方法。
背景技术
碰撞问题多年来一直受到较多的关注,碰撞检测方法在计算几何、计算机动画、CAD/CAM,仿真机器人和虚拟现实等领域中都有较好的应用前景。
近二十多年来,研究人员在碰撞检测领域中做了相当多的有意义的工作,提出一些较为成熟的方法,总体上将这些方法分为两大类:几何分解法和分层包围盒法。前者是将整个虚拟空间划分为相等体积的小的单元格,只对占居了同一单元格或相邻单元格的几何对象进行相交计算。比较典型的例子有:八叉树、k-d树、BSP树等。这类方法的特点为:方法复杂、精度高。分层包围盒的核心思想是用体积略大而几何特性简单的包围盒来近似地描述复杂的几何对象,从而通过判断包围盒是否重叠来粗略估计两检测对象是否碰撞,此外可以通过构造树状分层结构一步步逼近几何模型,提高检测精度。分层包围盒由于其方法简单、效率相对高,成为一种被广泛应用的碰撞检测方法。
但现有的动态碰撞检测方法还存在一些问题,如检测中会发生刺穿和遗漏等。另外,传统的多物体间的碰撞检测方法一般时间复杂度为O(n2),不能满足实时性的要求,不利于碰撞检测快速实现。基于空间分割技术的几何分解方法由于分区数目较难把握,效率不高。八叉树和其它几何模型在解决碰撞检测的框架之间的几何干涉问题时,也不会大幅度提高效率。尽管也可以采用分层包围盒技术来加速物体场景的碰撞检测,但一般的包围盒方法作为一个整体方法,检测精度低,效率提高并不明显。
发明内容
本发明的目的在于克服现有技术的不足,提供一种快速的基于包围盒树的碰撞检测方法。
为达到上述目的,本发明采用如下技术方案:
本发明首先提供一种基于包围盒树的碰撞检测方法,从树根部出发向树枝最末端检测,包含如下步骤:
步骤a:建立两个物体的包围盒树;该步骤a具体包含:
步骤a1:建立整个物体的包围盒,该包围盒作为该物体的包围盒树的根节点;
步骤a2:利用与局部坐标轴垂直的平面将上述包围盒划分成两个子包围盒以形成根节点的两个子节点,当所有子节点包含的基本几何元素个数少于预先给定的叶节点所包含几何元素个数的最小值时,转向步骤b,否则转向步骤a3;
步骤a3:对步骤a2中得到的两个子节点分别递归地执行上述包围盒的分割过程,当递归深度超过了预先给定的最大树深度时,转向步骤b,否则继续执向步骤a2;
步骤b:取所述两个物体的包围盒树的当前结点两两之间进行检测,判断是否发生碰撞,若发生碰撞,转向步骤c,若没碰撞,转向步骤d;
步骤c:判断当前结点是否为叶子结点,若是,进行精确检测确定是否真的发生碰撞,并根据检测结果更新包含“最近距离”,“速度”,“是否碰撞”在内的节点信息,并记录“最近距离”在搜索树中的路径,记下该结点,返回;若不是叶子结点,则取它所有子结点作为该树的当前结点,递归执行步骤b;
步骤d:如果当前结点没有未检测的兄弟结点,表明没发生碰撞,则计算包含“最近距离”,“速度”,“是否碰撞”在内的节点信息,记下当前结点后,返回;如果还有未检测的兄弟结点,则依次将下兄弟结点作为该树的当前结点,递归执行步骤b。
进一步地,所述步骤b中,对当前结点两两之间进行检测时,***可以根据优先级链表的次序,依次检测物体两两间的碰撞情况,该优先级链表根据优先级函数P获得,该优先级函数P如下:
V=Dmin(k-1)-Dmin(k-2)
P是bCollide,V,Dmin的函数,bCollide表示上次检测是否发生碰撞;bCollide=1时表示发生碰撞,bCollide=0时没发生碰撞;Dmin为上次碰撞检测时计算出的两物体最近点之间的距离;V表示上次碰撞检测时的物体速度,V的值为前一次和前两次最近距离的差值;Length1和Length2分别为两物体的平均宽度,即长、宽、高的平均值;比值的物理含义是两物体间的相对距离。
进一步地,当P小于预定值时可以放弃该节点的检测,并通过计数器C记录该节点被放弃检测的次数,若计数器C超过了预设值,则***检测该节点,并将计数器清零。
本发明还提供一种基于包围盒树的碰撞检测方法,从树枝最末端出发向树根部检测,包含如下步骤:
步骤e:建立两个物体的包围盒树;该步骤e具体包含:
步骤e1:建立整个物体的包围盒,该包围盒作为该物体的包围盒树的根节点;
步骤e2:利用与局部坐标轴垂直的平面将上述包围盒划分成两个子包围盒以形成根节点的两个子节点,当所有子节点包含的基本几何元素个数少于预先给定的叶节点所包含几何元素个数的最小值时,转向步骤f,否则转向步骤e3;
步骤e3:对步骤e2中得到的两个子节点分别递归地执行上述包围盒的分割过程,当递归深度超过了预先给定的最大树深度时,转向步骤f,否则继续执向步骤e2;
步骤f:将已经检测到发生碰撞的结点,作为当前结点;
步骤g:检测当前结点是否发生碰撞,如发生,则方法结束返回,若没碰撞,转向步骤h;
步骤h:对当前节点的兄弟节点进行碰撞检测,若发生碰撞,则方法结束;若未发生碰撞,则将父节点作为当前节点,进入包围盒树的更高一层,并转入步骤g。
进一步地,所述步骤g中,对当前结点两两之间进行检测时,***可以根据优先级链表的次序,依次检测物体两两间的碰撞情况,该优先级链表根据优先级函数P获得,该优先级函数P如下:
V=Dmin(k-1)-Dmin(k-2)
P是bCollide,V,Dmin的函数,bCollide表示上次检测是否发生碰撞;bCollide=1时表示发生碰撞,bCollide=0时没发生碰撞;Dmin为上次碰撞检测时计算出的两物体最近点之间的距离;V表示上次碰撞检测时的物体速度,V的值为前一次和前两次最近距离的差值;Length1和Length2分别为两物体的平均宽度,即长、宽、高的平均值;比值的物理含义是两物体间的相对距离。
进一步地,当P小于预定值时可以放弃该节点的检测,并通过计数器C记录该节点被放弃检测的次数,若计数器C超过了预设值,则***检测该节点,并将计数器清零。
进一步,物体的树根部的根节点可以具有超时计数器Cr,每对该物体进行一次自下而上的搜索就将计数器Cr的值加一,若计数器Cr的值超过预设的定值,就对该物体进行从树根部出发向树枝最末端检测的方法。
本发明再一种基于包围盒树的碰撞检测方法,从树枝最末端出发向树根部检测,包含如下步骤:
步骤i:将根据对该物体进行从树根部出发向树枝最末端检测的方法生成的“最近距离”路径,在两物体的最底层选择具有“最近距离”的两节点作为当前节点;
步骤j:检测当前结点是否发生碰撞,如发生,则方法结束返回,若没碰撞,转向步骤i;
步骤k:对当前节点的兄弟节点进行碰撞检测,若发生碰撞,则方法结束;若未发生碰撞,则将父节点作为当前节点,进入包围盒树的更高一层,并转入步骤j。
进一步地,所述步骤j中,对当前结点两两之间进行检测时,***可以根据优先级链表的次序,依次检测物体两两间的碰撞情况,该优先级链表根据优先级函数P获得,该优先级函数P如下:
V=Dmin(k-1)-Dmin(k-2)
P是bCollide,V,Dmin的函数,bCollide表示上次检测是否发生碰撞;bCollide=1时表示发生碰撞,bCollide=0时没发生碰撞;Dmin为上次碰撞检测时计算出的两物体最近点之间的距离;V表示上次碰撞检测时的物体速度,V的值为前一次和前两次最近距离的差值;Length1和Length2分别为两物体的平均宽度,即长、宽、高的平均值;比值的物理含义是两物体间的相对距离。
进一步地,当P小于预定值时可以放弃该节点的检测,并通过计数器C记录该节点被放弃检测的次数,若计数器C超过了预设值,则***检测该节点,并将计数器清零。
进一步地,物体的树根部的根节点可以具有超时计数器Cr,每对该物体进行一次自下而上的搜索就将计数器Cr的值加一,若计数器Cr的值超过预设的定值,就对该物体进行从树根部出发向树枝最末端检测的方法。
本发明的有益效果是:
(1)通过优化AABB包围盒存储结构,在包围盒节点上增加“上次最近距离”、“速度”、“是否碰撞”等信息,提供了碰撞部位、碰撞程度、相对速度等动态时空信息。
(2)通过在包围盒树中建立多级优先级策略,提高了碰撞检测速度,适应了动态碰撞检测的需要,大幅提高了检测效率。
(3)超时计数器的引入有效避免了漏检的发生,检测精度可根据***负荷自动适应,在保证高精度前提下,有效地满足碰撞检测的实时要求。
附图说明
附图1是轴对齐包围盒的示意图。
附图2是包围球的示意图。
附图3是方向包围盒的示意图。
附图4是离散方向多面体包围盒的示意图。
附图5是本发明建立的包围盒的示意图。
附图6是本发明建立的碰撞检测优先级链表的示意图。
附图7是是本发明的最近距离路径的示意图。
具体实施方式
以下结合附图给出本发明的一种具体实施方式。
包围盒作为公认的比较好的碰撞检测手段已经被广泛应用。包围盒方法的核心思想是用体积略大而几何特性简单的包围盒来近似地描述复杂的几何对象,从而通过判断包围盒是否重叠来粗略估计两检测对象是否碰撞。因为虚拟环境中大量物体之间相距较远,因此,这种方法可以筛选掉大量没有发生碰撞的物体对,从而加快碰撞检测的速度。使用时可以根据需要选用合适的包围盒。比较典型的包围盒,有沿坐标轴的轴对齐包围盒AABB,即立方体包围盒(如附图1所示),包围球(如附图2所示),方向包围盒OBB(如附图3所示)和离散方向多面体k-dop包围盒(如附图4所示)。AABB包围盒在碰撞检测的历史中使用得最多最久,它在包围盒的生成、相交检测等方面都相当简单,并且能不随被包围对象旋转而旋转,所以更新方法也很简单。
另外,构造树状的层次结构可以越来越逼近对象的几何模型,直至几乎完全获得对象的几何特性。一个复杂物体通常由很多几何子部分组成,可以进一步求出这些几何子部分的包围盒,这些子部分又可以递归地由更小的部分组成,因此可将物体及其子部分的包围盒组织成层次结构树(例如组织成一棵二叉树),该树的根结点是物体的包围盒,叶结点是构成物体各个子部分的几何元(如四面体),而中间结点则对应于各级子部分的包围盒。如果该层次结构组织得当,则可以进一步加速检测方法。
在此基础上,本发明提出一种基于包围盒层次树的碰撞检测方法,包围盒树选用的是AABB包围盒。本发明包围盒层次树法以物体多面体的B-rep实体模型表达为基础,详细记录构成物体的所有几何元素的几何信息及其相互连接关系(即拓扑信息),以便直接存取构成物体的各个面、边以及各个顶点的定义参数,有利于以面、边、点为基础进行各种几何运算和操作;并且提供碰撞部位、物体间的距离、速度等信息。本发明包围盒层次树法可以快速排除不相交的物体。
本发明基于上述包围盒层次树法设计了两种搜索方法:第一种是自上而下的搜索方法,即从树根部向树枝最末端逐层搜索,该方法能实现碰撞检测的精确计算,并且能提供碰撞部位、物体间的距离、速度等信息;第二种是自下而上的搜索方法,即从树枝最末端向树根部逐层搜索,主要针对前次检测已发生碰撞的情况,目的是快速判断是否碰撞,第二种方法在很大程度上避免许多不必要的检测。
下面首先对本发明的包围盒层次树法进行阐释,然后对基于该包围盒层次树法的两种搜索方法分别进行阐释。
以建立两个物体的包围盒树来说明本发明的包围盒层次树法。可以参考图5,包围盒层次树法具体包含:
步骤a1:建立整个物体的包围盒,该包围盒作为该物体的包围盒树的根节点;
步骤a2:利用与局部坐标轴垂直的平面将上述包围盒划分成两个子包围盒以形成根节点的两个子节点,当所有子节点包含的基本几何元素个数少于预先给定的叶节点所包含几何元素个数的最小值时,转向步骤b,否则转向步骤a3;
步骤a3:对步骤a2中得到的两个子节点分别递归地执行上述包围盒的分割过程,当递归深度超过了预先给定的最大树深度时,转向步骤b,否则继续执向步骤a2。
适当的终止条件对于递归过程而言相当重要。为此,本发明为上述递归创建包围盒树的过程设计了以下三个出口:
1.递归深度超过了预先给定的最大树深度;
2.子节点所包含的基本几何元素个数少于预先给定的叶节点所包含几何元素个数的最小值;
3.左、右子节点至少有一个包含的几何元素个数接近于其父节点所包含几何元素个数。因为到这一步后再划分下去已失去意义。
如图5所示,包围盒树的每一个节点包含两个子对象:多面体子对象和包围盒子对象。多面体子对象用于精确的碰撞检测,而包围盒子对象用于快速、粗略的检测。“上次最近距离”表示该节点在上一次与另一物体作碰撞检测时距离另一物体最近点的距离,可以以该节点所在包围盒与另一物体上某个包围盒之间的距离近似表示“上次最近距离”。“上次速度”记录了两物体间的相对运动速度,即“上次最近距离”的变化率。“上次最近距离、速度、是否碰撞”的计算能提供碰撞检测的优先级依据,从而进一步优化碰撞检测方法。另一方面,***可以根据碰撞检测的优先级和***当前的负荷程度,判断是否进行碰撞检测以及进行检测的范围。例如,有两个相距较远而相对运动很慢的物体,而此时***的负荷又很重,则完全没有必要进行碰撞检测。
第一种自上而下的搜索方法,即从树根部向树枝最末端逐层搜索的方法,适合于先前没有发生碰撞的物体,能实现碰撞检测的精确计算,并且能提供碰撞部位、物体间的距离、速度等信息,该方法从树根出发一层一层进行检测,主要步骤如下:
步骤a:建立两个物体的包围盒树,具体步骤如上述;
步骤b:取所述两个物体的包围盒树的当前结点两两之间进行检测,判断是否发生碰撞,若发生碰撞,转向步骤c,若没碰撞,转向步骤d;
步骤c:判断当前结点是否为叶子结点,若是,进行精确检测确定是否真的发生碰撞,并根据检测结果更新包含“最近距离”,“速度”,“是否碰撞”在内的节点信息,并记录“最近距离”在搜索树中的路径,记下该结点,返回;若不是叶子结点,则取它所有子结点作为该树的当前结点,递归执行步骤b;
步骤d:如果当前结点没有未检测的兄弟结点,表明没发生碰撞,则计算包含“最近距离”,“速度”,“是否碰撞”在内的节点信息,记下当前结点后,返回;如果还有未检测的兄弟结点,则依次将下兄弟结点作为该树的当前结点,递归执行步骤b。
所述精确检测就是指对两个物体做检测,方法同检测两个包围盒相同,此处不再予以赘述。因为包围盒方法相当于将物体加上了一个包围盒,扩大了原物体,故包围盒检测发生碰撞并不一定物体真的就发生碰撞,有可能只是加上的盒子区域发生碰撞,因此还要具体对两个物体作检测。
考虑到两物体发生碰撞后,下一次检测时很大概率上会在同一部位检测到碰撞这一现象,本发明又对上述方法作了一定修改,采取由下到上搜索包围盒树,从包围盒树最低层具有最近距离的两个多面体出发,进行碰撞检测。“最近距离”路径可以参照图6,多面体a与多面体b上具有最近距离的两个多面体是多面体a32与多面体b31。该方法适合于先前发生过碰撞的物体,具体步骤如下:
步骤i:将根据第一种方法生成的“最近距离”路径,在两物体的最底层选择具有“最近距离”的两节点作为当前节点;
步骤j:检测当前结点是否发生碰撞,如发生,则方法结束返回,若没碰撞,转向步骤i;
步骤k:对当前节点的兄弟节点进行碰撞检测,若发生碰撞,则方法结束;若未发生碰撞,则将父节点作为当前节点,进入包围盒树的更高一层,并转入步骤j。
第二种方法的主要目的是快速判断是前一次检测发生碰撞的两物体这次是否碰撞。由于该方法是从包围盒树的底层出发,检测到碰撞后就立即退出,因此能在很大程度上避免许多不必要的检测。
本发明除了在包围盒树中建立了一定的优先级策略(如上述的第一种方法和第二种方法),进一步地,还可以在物体之间建立一个碰撞检测优先级链表,如图7所示。优先级链表包含了所有物体之间的两两组合。***根据优先级链表的次序,依次检测物体两两间的碰撞情况,适当时***也会放弃对某些低优先级节点的检测。本发明定义优先级函数P如下:
V=Dmin(k-1)-Dmin(k-2)
P是bCollide,V,Dmin的函数,bCollide表示上次检测是否发生碰撞;bCollide=1时表示发生碰撞,bCollide=0时没发生碰撞;Dmin为上次碰撞检测时计算出的两物体最近点之间的距离;V表示上次碰撞检测时的物体速度,V的值为前一次和前两次最近距离的差值;Length1和Length2分别为两物体的平均宽度,即长、宽、高的平均值;比值的物理含义是两物体间的相对距离,例如,两物体的平均宽度均为10,两物体相距也为10,则比值表示两物体间的距离有“一个物体这么远”。
优先级函数P的取值范围为[-1,1]。当优先级函数P=1时,表示上一轮检测时发生了碰撞,则本轮必须检测这两个物体是否碰撞;当0<P<1时,表示上一轮检测时没检测到碰撞但此时两物体的距离已很接近,所以根据它们的运动速度在链表中排列;当P<0时,表示两物体相距较远,也根据它们的运动速度在链表中排列;当P=-1时,表示两物体相距较远,且相对运动速度为零。
进一步地,可以规定P小于某个预定值时就放弃该节点的检测。可以设置一个计数器C记录该节点被放弃检测的次数,若计数器C超过了预设的定值,则***必须检测该节点,并将计数器清零。
另外,上述第二种方法仅是更新了部分节点的信息。为了保证其它节点的信息也得到及时更新,可以在代表物体的根节点也加入超时计数器Cr,每对该物体进行一次自下而上的搜索就将计数器Cr的值加一,若计数器Cr的值超过预设的定值,则只能对该物体进行第一种方法,即自上而下的搜索方法。
综上所述,本发明所提供的基于包围盒树的碰撞检测方法,通过优化AABB包围盒存储结构,在包围盒节点上增加“上次最近距离”、“速度”、“是否碰撞”等信息,提供了碰撞检测的优先级依据,为在包围盒树中建立碰撞检测优先级链表提供了一定的优先级策略,碰撞检测优先级链表主要完成了针对物体间距离的优先级排列,用以提高碰撞检测速度。而基于包围盒树的碰撞检测搜索方法保证了碰撞检测快速、准确的完成。超时计数器的引入又避免了漏检的发生。在基于包围盒树的搜索方法中,第一种自上而下的搜索方法实现了碰撞检测的精确计算,并且提供了碰撞部位、物体间的距离、速度等信息。而第二种自下而上的搜索方法主要针对前次检测已发生碰撞的情况,其目的是快速判断是否碰撞。第二种方法在很大程度上避免许多不必要的检测。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明构思的前提下,还可以做出若干改变、改进或润饰也应视为本发明的保护范围。
Claims (11)
1.一种基于包围盒树的碰撞检测方法,从树根部出发向树枝最末端检测,其特征在于,该方法包含如下步骤:
步骤a:建立两个物体的包围盒树;该步骤a具体包含:
步骤a1:建立整个物体的包围盒,该包围盒作为该物体的包围盒树的根节点;
步骤a2:利用与局部坐标轴垂直的平面将上述包围盒划分成两个子包围盒以形成根节点的两个子节点,当所有子节点包含的基本几何元素个数少于预先给定的叶节点所包含几何元素个数的最小值时,转向步骤b,否则转向步骤a3;
步骤a3:对步骤a2中得到的两个子节点分别递归地执行上述包围盒的分割过程,当递归深度超过了预先给定的最大树深度时,转向步骤b,否则继续执向步骤a2;
步骤b:取所述两个物体的包围盒树的当前结点两两之间进行检测,判断是否发生碰撞,若发生碰撞,转向步骤c,若没碰撞,转向步骤d;
步骤c:判断当前结点是否为叶子结点,若是,进行精确检测确定是否真的发生碰撞,并根据检测结果更新包含“最近距离”,“速度”,“是否碰撞”在内的节点信息,并记录“最近距离”在搜索树中的路径,记下该结点,返回;若不是叶子结点,则取它所有子结点作为该树的当前结点,递归执行步骤b;
步骤d:如果当前结点没有未检测的兄弟结点,表明没发生碰撞,则计算包含“最近距离”,“速度”,“是否碰撞”在内的节点信息,记下当前结点后,返回;如果还有未检测的兄弟结点,则依次将下兄弟结点作为该树的当前结点,递归执行步骤b。
2.根据权利要求1所述的基于包围盒树的碰撞检测方法,其特征在于,所述步骤b中,对当前结点两两之间进行检测时,***是根据优先级链表的次序,依次检测物体两两间的碰撞情况,该优先级链表根据优先级函数P获得,该优先级函数P如下:
V=Dmin(k-1)-Dmin(k-2)
3.根据权利要求2所述的基于包围盒树的碰撞检测方法,其特征在于,当P小于预定值时放弃该节点的检测,并通过计数器C记录该节点被放弃检测的次数,若计数器C超过了预设值,则***检测该节点,并将计数器清零。
4.一种基于包围盒树的碰撞检测方法,从树枝最末端出发向树根部检测,其特征在于,该方法包含如下步骤:
步骤e:建立两个物体的包围盒树;该步骤e具体包含:
步骤e1:建立整个物体的包围盒,该包围盒作为该物体的包围盒树的根节点;
步骤e2:利用与局部坐标轴垂直的平面将上述包围盒划分成两个子包围盒以形成根节点的两个子节点,当所有子节点包含的基本几何元素个数少于预先给定的叶节点所包含几何元素个数的最小值时,转向步骤f,否则转向步骤e3;
步骤e3:对步骤e2中得到的两个子节点分别递归地执行上述包围盒的分割过程,当递归深度超过了预先给定的最大树深度时,转向步骤f,否则继续执向步骤e2;
步骤f:将已经检测到发生碰撞的结点,作为当前结点;
步骤g:检测当前结点是否发生碰撞,如发生,则方法结束返回,若没碰撞,转向步骤h;
步骤h:对当前节点的兄弟节点进行碰撞检测,若发生碰撞,则方法结束;若未发生碰撞,则将父节点作为当前节点,进入包围盒树的更高一层,并转入步骤g。
5.根据权利要求4所述的基于包围盒树的碰撞检测方法,其特征在于,所述步骤g中,对当前结点两两之间进行检测时,***是根据优先级链表的次序,依次检测物体两两间的碰撞情况,该优先级链表根据优先级函数P获得,该优先级函数P如下:
V=Dmin(k-1)-Dmin(k-2)
P是bCollide,V,Dmin的函数,bCollide表示上次检测是否发生碰撞;bCollide=1时表示发生碰撞,bCollide=0时没发生碰撞;Dmin为上次碰撞检测时计算出的两物体最近点之间的距离;V表示上次碰撞检测时的物体速度,V的值为前一次和前两次最近距离的差值;Length1和Length2分别为两物体的平均宽度,即长、宽、高的平均值;比值的物理含义是两物体间的相对距离。
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如下:
V=Dmin(k-1)-Dmin(k-2)
10.根据权利要求9所述的基于包围盒树的碰撞检测方法,其特征在于,当P小于预定值时放弃该节点的检测,并通过计数器C记录该节点被放弃检测的次数,若计数器C超过了预设值,则***检测该节点,并将计数器清零。
11.根据权利要求10所述的基于包围盒树的碰撞检测方法,其特征在于,物体的树根部的根节点具有超时计数器Cr,每对该物体进行一次自下而上的搜索就将计数器Cr的值加一,若计数器Cr的值超过预设的定值,就对该物体进行权利要求1-3任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104337932A CN102446122A (zh) | 2011-12-21 | 2011-12-21 | 一种基于包围盒树的碰撞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104337932A CN102446122A (zh) | 2011-12-21 | 2011-12-21 | 一种基于包围盒树的碰撞检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102446122A true CN102446122A (zh) | 2012-05-09 |
Family
ID=46008633
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011104337932A Pending CN102446122A (zh) | 2011-12-21 | 2011-12-21 | 一种基于包围盒树的碰撞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102446122A (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102693363A (zh) * | 2012-05-10 | 2012-09-26 | 北京像素软件科技股份有限公司 | 一种网络游戏中基于四叉树的场景管理方法 |
CN104200031A (zh) * | 2014-09-04 | 2014-12-10 | 大连大学 | 一种基于距离优先和时空相关性的碰撞检测方法 |
CN104867177A (zh) * | 2014-12-23 | 2015-08-26 | 上海电机学院 | 一种基于包围盒树法的并行碰撞检测方法 |
CN105469406A (zh) * | 2015-11-30 | 2016-04-06 | 东北大学 | 一种基于包围盒与空间划分的虚拟物体碰撞检测方法 |
CN106096082A (zh) * | 2016-05-24 | 2016-11-09 | 国网安徽省电力公司宿州供电公司 | 一种基于数据分块及并行处理的碰撞检测方法 |
CN106197928A (zh) * | 2016-06-30 | 2016-12-07 | 哈尔滨理工大学 | 一种基于虚拟球的包围盒碰撞检测方法 |
CN104154917B (zh) * | 2013-11-19 | 2017-02-08 | 深圳信息职业技术学院 | 一种机器人避碰路径的规划方法、装置 |
CN108839019A (zh) * | 2018-06-25 | 2018-11-20 | 广州视源电子科技股份有限公司 | 机械臂的运动路径的确定方法和装置 |
CN111177888A (zh) * | 2019-12-09 | 2020-05-19 | 武汉光庭信息技术股份有限公司 | 一种仿真场景碰撞检测方法及*** |
CN112825199A (zh) * | 2019-11-20 | 2021-05-21 | 北京博超时代软件有限公司 | 碰撞检测方法、装置、设备及存储介质 |
CN112932662A (zh) * | 2021-02-01 | 2021-06-11 | 威海威高骨科手术机器人有限公司 | 一种具有患者安全保护的复位位置检测方法 |
CN113077643A (zh) * | 2021-03-23 | 2021-07-06 | 上海振华重工(集团)股份有限公司 | 一种交通控制方法、交通控制***及存储介质 |
CN113340247A (zh) * | 2021-06-15 | 2021-09-03 | 上海理工大学 | 一种用于车身接触式三坐标测量的连续碰撞检测方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5590283A (en) * | 1990-10-03 | 1996-12-31 | Thinking Machines Corporation | Parallel computer system with physically separate tree networks for data and control messages |
CN101593366A (zh) * | 2009-06-24 | 2009-12-02 | 北京航空航天大学 | 一种基于平衡二叉树的大规模虚拟场景碰撞检测方法 |
CN102193837A (zh) * | 2011-04-26 | 2011-09-21 | 浙江大学 | 一种基于前线的包围盒碰撞检测方法 |
CN102253862A (zh) * | 2011-04-26 | 2011-11-23 | 浙江大学 | 一种基于SIMD的k-DOP包围盒碰撞检测方法 |
-
2011
- 2011-12-21 CN CN2011104337932A patent/CN102446122A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5590283A (en) * | 1990-10-03 | 1996-12-31 | Thinking Machines Corporation | Parallel computer system with physically separate tree networks for data and control messages |
CN101593366A (zh) * | 2009-06-24 | 2009-12-02 | 北京航空航天大学 | 一种基于平衡二叉树的大规模虚拟场景碰撞检测方法 |
CN102193837A (zh) * | 2011-04-26 | 2011-09-21 | 浙江大学 | 一种基于前线的包围盒碰撞检测方法 |
CN102253862A (zh) * | 2011-04-26 | 2011-11-23 | 浙江大学 | 一种基于SIMD的k-DOP包围盒碰撞检测方法 |
Non-Patent Citations (2)
Title |
---|
XIONG YUMEI等: "A Dynamic Collision detection algorithm based on Bounding box-tree", 《ADVANCED MATERIALS RESEARCH》, 28 February 2011 (2011-02-28), pages 1041 - 1043 * |
YUMEI XIONG等: "Research on Bounding Box-tree Algorithm for Collision Detection", 《ADVANCED MATERIALS RESEARCH》, vol. 186, 31 January 2011 (2011-01-31), pages 646 - 647 * |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102693363A (zh) * | 2012-05-10 | 2012-09-26 | 北京像素软件科技股份有限公司 | 一种网络游戏中基于四叉树的场景管理方法 |
CN102693363B (zh) * | 2012-05-10 | 2015-03-25 | 北京像素软件科技股份有限公司 | 一种网络游戏中基于四叉树的场景管理方法 |
CN104154917B (zh) * | 2013-11-19 | 2017-02-08 | 深圳信息职业技术学院 | 一种机器人避碰路径的规划方法、装置 |
CN104200031A (zh) * | 2014-09-04 | 2014-12-10 | 大连大学 | 一种基于距离优先和时空相关性的碰撞检测方法 |
CN104200031B (zh) * | 2014-09-04 | 2017-11-24 | 大连大学 | 一种基于距离优先和时空相关性的碰撞检测方法 |
CN104867177A (zh) * | 2014-12-23 | 2015-08-26 | 上海电机学院 | 一种基于包围盒树法的并行碰撞检测方法 |
CN105469406A (zh) * | 2015-11-30 | 2016-04-06 | 东北大学 | 一种基于包围盒与空间划分的虚拟物体碰撞检测方法 |
CN105469406B (zh) * | 2015-11-30 | 2018-05-04 | 东北大学 | 一种基于包围盒与空间划分的虚拟物体碰撞检测方法 |
CN106096082A (zh) * | 2016-05-24 | 2016-11-09 | 国网安徽省电力公司宿州供电公司 | 一种基于数据分块及并行处理的碰撞检测方法 |
CN106197928A (zh) * | 2016-06-30 | 2016-12-07 | 哈尔滨理工大学 | 一种基于虚拟球的包围盒碰撞检测方法 |
CN108839019A (zh) * | 2018-06-25 | 2018-11-20 | 广州视源电子科技股份有限公司 | 机械臂的运动路径的确定方法和装置 |
CN108839019B (zh) * | 2018-06-25 | 2020-09-01 | 广州视源电子科技股份有限公司 | 机械臂的运动路径的确定方法和装置 |
CN112825199A (zh) * | 2019-11-20 | 2021-05-21 | 北京博超时代软件有限公司 | 碰撞检测方法、装置、设备及存储介质 |
CN112825199B (zh) * | 2019-11-20 | 2023-09-19 | 北京博超时代软件有限公司 | 碰撞检测方法、装置、设备及存储介质 |
CN111177888A (zh) * | 2019-12-09 | 2020-05-19 | 武汉光庭信息技术股份有限公司 | 一种仿真场景碰撞检测方法及*** |
CN111177888B (zh) * | 2019-12-09 | 2022-06-17 | 武汉光庭信息技术股份有限公司 | 一种仿真场景碰撞检测方法及*** |
CN112932662A (zh) * | 2021-02-01 | 2021-06-11 | 威海威高骨科手术机器人有限公司 | 一种具有患者安全保护的复位位置检测方法 |
CN113077643A (zh) * | 2021-03-23 | 2021-07-06 | 上海振华重工(集团)股份有限公司 | 一种交通控制方法、交通控制***及存储介质 |
CN113077643B (zh) * | 2021-03-23 | 2022-05-03 | 上海振华重工(集团)股份有限公司 | 一种交通控制方法、交通控制***及存储介质 |
CN113340247A (zh) * | 2021-06-15 | 2021-09-03 | 上海理工大学 | 一种用于车身接触式三坐标测量的连续碰撞检测方法 |
CN113340247B (zh) * | 2021-06-15 | 2022-07-12 | 上海理工大学 | 一种用于车身接触式三坐标测量的连续碰撞检测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102446122A (zh) | 一种基于包围盒树的碰撞检测方法 | |
CN104200031B (zh) | 一种基于距离优先和时空相关性的碰撞检测方法 | |
Liu et al. | A dynamic fusion pathfinding algorithm using delaunay triangulation and improved a-star for mobile robots | |
CN112669434B (zh) | 一种基于网格与包围盒的碰撞检测方法 | |
CN101510225B (zh) | 产品stl模型布尔运算方法 | |
Wongpiromsarn et al. | Synthesis of control protocols for autonomous systems | |
CN110220521A (zh) | 一种高精地图的生成方法和装置 | |
CN105527964A (zh) | 一种机器人路径规划方法 | |
CN106886980A (zh) | 一种基于三维激光雷达目标识别的点云密度增强的方法 | |
CN102999661A (zh) | 基于粒子群优化的并行碰撞检测***及方法 | |
CN109682336A (zh) | 用于车身精度检测的三坐标测量路径自动规划与优化方法 | |
CN102855387A (zh) | 一种基于小生境粒子群的二维空间多路径规划方法 | |
CN106780058A (zh) | 动态网络的社团划分方法及装置 | |
CN102393826A (zh) | 一种基于多核并行处理的柔性场景连续碰撞检测方法 | |
CN104992466A (zh) | 一种三维场景的即时寻径方法 | |
CN101937453A (zh) | 一种基于加权拓扑约束比较的三维模型检索方法 | |
CN106197928A (zh) | 一种基于虚拟球的包围盒碰撞检测方法 | |
CN103778657B (zh) | 一种基于空间剖分的声线束追踪方法 | |
CN105785919A (zh) | 点云五轴无全局干涉刀轴矢量可行域计算方法 | |
CN102393827A (zh) | 一种基于连续法向锥剔除的柔性场景连续碰撞检测方法 | |
CN104331080A (zh) | 用于移动式机器人的定点跟踪路径规划方法 | |
CN115903816A (zh) | 一种低能耗移动机器人路径规划方法 | |
CN104063594A (zh) | 一种基于优化学习机的复杂可靠度的计算方法 | |
Opoku et al. | The Ar-Star (Ar) Pathfinder | |
Mi et al. | Path planning of indoor mobile robot based on improved A* algorithm incorporating RRT and JPS |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120509 |