一种基于剖分的并行碰撞检测方法

文档序号:6597050阅读:339来源:国知局
专利名称:一种基于剖分的并行碰撞检测方法
技术领域
本发明涉及计算机动画、仿真机器人以及虚拟现实领域,具体的说是一种任意物
体之间的碰撞检测方法。
背景技术
碰撞问题作为计算几何、计算机动画、仿真机器人和虚拟现实等领域中的一个经 典问题,多年来一直受到较多的关注。计算几何领域的研究者们对多面体的交集等问题产 生了兴趣,之后又意识到解决碰撞问题自身比求交集问题更有意义。这些算法虽然在异常 的情况下较为有效,但往往由于过于理论化,而难以实现。在仿真系统中,碰撞问题主要是 集中于为在障碍物间运动的物体作碰撞检测和物体的碰撞响应上。在有关虚拟现实的应用 中,碰撞检测的实时性成为最突出的问题之一。人们尝试对物体用不同的表示方法来加速 碰撞检测过程,如八叉树表示法,CSG表示法,边界表示模式(B-R印),现在,很多采用层次 包围盒技术来加速多面体场景的碰撞检测,另外提出了一种空间分割技术的方法。
传统的多物体间的碰撞检测算法一般时间复杂度为0(n2),不能满足实时性的要 求,而且大多是集中式串行处理方法,不利于碰撞检测快速实现。八叉树和其它几何模型在 解决碰撞检测的框架之间的几何干涉问题时,不会大幅度提高算法效率。采用层次包围盒 技术来加速多面体场景的碰撞检测,但包围盒方法作为一个整体的方法,检测精度低,效率 提高并不明显。另外提出了一种空间分割技术的方法,影响该算法效率的一个重要因素是 分区的多少,而分区的数目又较难把握。

发明内容
本发明的目的是提供一种性能良好的基于剖分的并行碰撞检测方法,不但能适用 于任意物体动态碰撞检测,并在保证高精度前提下,有效地满足碰撞检测的实时要求。本发 明的技术方案如下所述。
—种基于剖分的并行碰撞检测方法,其包含以下步骤 a、将碰撞检测问题中涉及的多面体剖分为若干个四面体,则两个复杂的多面体间
的碰撞检测问题变更为多个四面体间的并行碰撞检测; b、采用并行处理的方式分别解决上述多个四面体间的碰撞检测; 其中,将多面体剖分为若干个四面体的剖分方法包含如下步骤 步骤l :判断多面体的类型,若是简单多面体,转向步骤2,若为凸多面体,转向步 骤3,若为非凸多面体,转向步骤4; 步骤2 :调用简单多面体V(F,O)剖分为系列四面体的算法DivideV(F,O),转向步
骤5 ; 步骤3 :调用凸多面体的剖分算法DivideConvex(V); 步骤4 :调用非凸多面体的剖分算法DivideNonconvex(V),转向步骤5 ; 步骤5 :判断多面体是否已剖分为系列四面体,如没有,转向步骤l,否则结束。
其中,所述的简单多面体V(F,O)剖分为系列四面体的算法DivideV(F,O)的方法 包含如下步骤 步骤1 :将组成V(F,O)的原多面体的面F按Dela皿ay三角划分,剖分成几个三角 形; 步骤2 :这些三角形分别与顶点0构成一系列四面体;
步骤3 :将这些四面体分别剖分出去。 其中,所述的凸多面体的剖分算法DivideConvex(V)包含如下步骤 步骤1 :任取多面体的一个面F, 一个顶点0(0不是面F的顶点); 步骤2 :将顶点0与面F的各个顶点相连接,得简单多面体V(F, 0); 步骤3:将V(F,0)剖分出去,得一新多面体V'; 步骤4 :调用DivideV(F, 0),将V(F, 0)剖分为系列四面体。 其中,所述的非凸多面体的剖分算法DivideNonconvex(V)包含如下步骤 步骤1 :任取多面体的一个面F ; 步骤2:找出所有符合以下条件的顶点顶点位于面F的反侧,而该面位于该顶点 的反向; 步骤3 :求出每个顶点到面的垂直距离; 步骤4 :判断是否还有其它未处理的面,如有,转向步骤2 ;如没有,转向步骤5 ; 步骤5 :在求得的所垂直距离中,找出距离最短的一组即面F与顶点0 ; 步骤6 :将顶点0与面F的各个顶点相连接,得简单多面体V(F, 0); 步骤7 :将V(F, 0)剖分出去,得一新多面体V'; 步骤8 :调用DivideV(F, O),将V(O)剖分为系列四面体。 本发明的一个优选的技术方案是在步骤(a)之前加入如下的步骤用体积略大而
几何特性简单的包围盒来描述多面体,接着通过判断包围盒是否重叠来计算两多面体是否
碰撞;如果用包围盒作碰撞检测,没有发生碰撞时,则两个多面体一定没有发生碰撞,如果
用包围盒作检测,检测到发生了碰撞,则需要对多面体按步骤(a)、 (b)做碰撞检测。 本发明的一个优选的技术方案是通过构造树状分层结构包围盒一步步逼近所述
的多面体,以提高检测精度。 本发明提出了一种快速并行碰撞检测方法。与以往方法相比,不但进一步降低了 多个物体间的碰撞检测的时间复杂性,而且方法具备良好的通用性,能很好地适用于各种 运动形式的任意物体的碰撞检测,实时进行物体运动状态更新,完成动态碰撞检测。同时也 很好地保证各仿真节点的自治性和仿真监控系统的可扩展性。
具体实施例方式
现结合实施例,对本发明做进一步的描述。
实施例 本实施例采用MPI编程模型来模拟并行碰撞检测方法,MPI程序设计模式主要有 两种对等模式和主从模式,MPI并行程序实际上是分布在多台计算机上的多进程程序,进 程间的通信与调度由MPI库来实现。在进行程序设计时,采用了主从模式,主控进程控制数 据的同步,辅助进程用于计算是否发生碰撞。下面简要地介绍一下这两个进程。主控进程函数,它首先生成物体A, B的包围盒树,然后接收辅助进程发送的数据请求消息或碰撞发 生消息,若已经发生了碰撞或物体A, B的所有结点数据都已发送给辅助进程计算,则通知 该辅助进程可以退出;否则把物体A,B的下一个结点数据发送给该辅助进程计算。如此重 复,直到所有的辅助进程都已退出。 辅助进程向主控进程发送数据请求消息或碰撞发生消息,接着接收主控进程发送 的数据,若数据的第一位是0,则表示是结点的数据,就可以计算是否发生碰撞;若是1,则 表示其他进程已检测到碰撞,该辅助进程退出;若是2,则表示所有的数据已计算完毕,该 辅助进程退出。MPI并行检测方法程序在PI 11 700, RAM 256M, Linux 7. 2的集群计算机上测试, MPI并行程序采用了多个节点来计算,每个节点就是一台双CPU的计算机,每个节点上运行 一个测试进程,用了 4个节点,测试结果如表1所示。
表1碰撞检测程序运行测试结果
问题规模 平均执行时间(秒)
物体A 平面数物体B 平面数基本碰撞 检测无包围盒 的并行程 序含包围盒的 并行程序误判次 数
1001000,350.170.1070
1007002.31.110.980
1009005.022.512.040
10012505.42.752.640 现在再把基本碰撞检测方法与并行检测方法的测试数据对比分析,并行检测方法
的并行加速比接近2 : i,本发明所述的并行碰撞检测方法与基本碰撞检测方法相比在时
间效率上有了较大的提高,而且,并行检测方法的检测时间将随着并行机CPU数目的增加
而呈线性下降趋势。因此通过该并行检测方法,若碰撞检测的实时性达不到我们的要求,则 还可以增加处理的节点来进一步减少计算的时间,故本并行检测方法也具有良好的可扩展 性。若运用包围盒树的方法实现的并行碰撞检测,则进一步提高检测方法的速度。
权利要求
一种基于剖分的并行碰撞检测方法,其包含以下步骤a、将碰撞检测问题中涉及的多面体剖分为若干个四面体,则两个复杂的多面体间的碰撞检测问题变更为多个四面体间的并行碰撞检测;b、采用并行处理的方式分别解决上述多个四面体间的碰撞检测。
2. 如权利要求1所述的并行碰撞检测方法,其特征在于,将多面体剖分为若干个四面 体的剖分方法包含如下步骤步骤l :判断多面体的类型,若是简单多面体,转向步骤2,若为凸多面体,转向步骤3, 若为非凸多面体,转向步骤4;步骤2 :调用简单多面体V(F, 0)剖分为系列四面体的算法DivideV(F, O),转向步骤5 ;步骤3 :调用凸多面体的剖分算法DivideConvex(V);步骤4 :调用非凸多面体的剖分算法DivideNonconvex(V),转向步骤5 ;步骤5 :判断多面体是否已剖分为系列四面体,如没有,转向步骤l,否则结束。
3. 如权利要求2所述的并行碰撞检测方法,其特征在于,所述的简单多面体V(F,0)剖 分为系列四面体的算法DivideV(F, 0)的方法包含如下步骤步骤1 :将组成V(F, 0)的原多面体的面F按Delaunay三角划分,剖分成几个三角形; 步骤2 :这些三角形分别与顶点0构成一系列四面体; 步骤3 :将这些四面体分别剖分出去。
4. 如权利要求2所述的并行碰撞检测方法,其特征在于,所述的凸多面体的剖分算法DivideConvex(V)包含如下步骤步骤1 :任取多面体的一个面F,一个顶点0(0不是面F的顶点); 步骤2 :将顶点0与面F的各个顶点相连接,得简单多面体V(F, 0); 步骤3:将V(F, 0)剖分出去,得一新多面体V';步骤4 :调用DivideV(F, O),将V(F, 0)剖分为系列四面体。
5. 如权利要求2所述的并行碰撞检测方法,其特征在于,所述的非凸多面体的剖分算 法DivideNonco読x(V)包含如下步骤步骤1 :任取多面体的一个面F ;步骤2 :找出所有符合以下条件的顶点顶点位于面F的反侧,而该面位于该顶点的反向;步骤3 :求出每个顶点到面的垂直距离;步骤4 :判断是否还有其它未处理的面,如有,转向步骤2 ;如没有,转向步骤5 ; 步骤5 :在求得的所垂直距离中,找出距离最短的一组即面F与顶点0 ; 步骤6 :将顶点0与面F的各个顶点相连接,得简单多面体V(F, 0); 步骤7:将V(F,0)剖分出去,得一新多面体V';步骤8 :调用DivideV(F,O),将V(O)剖分为系列四面体。
6. 如权利要求l所述的并行碰撞检测方法,其特征在于,在步骤(a)之前加入如下的步骤用体积略大而几何特性简单的包围盒来描述多面体,接着通过判断包围盒是否重叠来 计算两多面体是否碰撞;如果用包围盒作碰撞检测,没有发生碰撞时,则两个多面体一定没 有发生碰撞,如果用包围盒作检测,检测到发生了碰撞,则需要对多面体按步骤(a)、 (b)做碰撞检测。
7.如权利要求6所述的并行碰撞检测方法,其特征在于,通过构造树状分层结构包围 盒一步步逼近所述的多面体,以提高检测精度。
全文摘要
本发明提出了一种快速并行碰撞检测方法。与以往方法相比,不但进一步降低了多个物体间的碰撞检测的时间复杂性,而且方法具备良好的通用性,能很好地适用于各种运动形式的任意物体的碰撞检测,实时进行物体运动状态更新,完成动态碰撞检测。同时也很好地保证各仿真节点的自治性和仿真监控系统的可扩展性。
文档编号G06T17/00GK101739713SQ20081020277
公开日2010年6月16日 申请日期2008年11月14日 优先权日2008年11月14日
发明者熊玉梅 申请人:上海电机学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1