基于GJK的凸体快速连续碰撞检测研究

合集下载

凸多面体连续碰撞检测的运动轨迹分离轴算法

凸多面体连续碰撞检测的运动轨迹分离轴算法

凸多面体连续碰撞检测的运动轨迹分离轴算法1. 引言- 研究背景和目的- 研究现状和不足- 研究方法和思路2. 数学模型与理论基础- 凸多面体的定义和性质- 连续碰撞检测的定义和原理- 分离轴算法的基本原理3. 运动轨迹分离轴算法- 算法的核心思想- 算法的具体实现流程- 算法的时间复杂度分析4. 实验结果与分析- 实验环境和参数设置- 实验结果分析与评估- 实验效果分析与对比5. 结论- 本文的主要贡献和创新性- 算法的局限性和未来发展方向- 总结和展望注:本提纲仅供参考,具体内容应根据实际需求进行调整和拓展。

1. 引言凸多面体连续碰撞检测是计算机图形学、机器人动力学、游戏开发等领域中重要的问题之一。

其主要目的是检测两个凸多面体在未来一段时间内是否会发生碰撞,从而能够在事故发生前进行预测和避免。

常见的方法包括分离轴算法、基于特征点的方法和边缘算法等。

其中,分离轴算法因为其高效性和准确性而被广泛使用。

然而,分离轴算法仅适用于静态场景,并且仅能检测两个凸多面体之间的相互碰撞。

在动态场景中,若存在多个凸多面体同时运动,在未来的一段时间内进行连续的碰撞检测就成为了一个十分具有挑战性的问题。

因此,我们需要开发一种新的算法来解决这个问题。

本文旨在提出一种运动轨迹分离轴算法,通过当前的位置、角度、速度和加速度等相关信息,对凸多面体的运动轨迹进行迭代检测,实现多个凸多面体之间的连续碰撞检测。

此外,本文还将对该算法进行详细的分析,包括运动轨迹分离轴的选择和计算、时间复杂度分析等。

同时,通过实验验证,本文将进一步证明该算法的准确性和可靠性。

本文的组成包括以下几个部分:首先,将介绍研究背景和目的,并探讨当前凸多面体连续碰撞检测领域中的研究现状和不足。

接下来,将详细介绍数学模型和理论基础,包括凸多面体、连续碰撞检测和分离轴算法等。

随后,将详细介绍运动轨迹分离轴算法的基本思路、实现方法及时间复杂度分析。

最后,通过实验结果与分析,将验证该算法的准确性和有效性,并总结和展望本文的研究工作。

(转)GJK算法详细介绍

(转)GJK算法详细介绍

(转)GJK算法详细介绍1. 概述2. 凸体(凸多⾯体或凸多边形)3. 明可夫斯基和(Minkowski Sum)4. 单纯形(Simplex)5. Support函数6. 创建单纯形7. 判定碰撞8. 迭代9. 检测单纯形概述和SAT(分离轴定理)算法⼀样,GJK算法也只对凸体有效。

GJK算法的优势是:通过support函数(后⾯会详细讲述),从⽽⽀持任何凸体形状之间的碰撞检测;相⽐SAT算法,你不需要⼀些额外的操作,⽐如增加特殊的代码和算法处理曲⾯形状。

GJK是⼀个迭代算法,但是如果事先给出穿透/分离向量,则它的收敛会很快,可以在常量时间内完成。

在3D环境中,GJK可以取代SAT算法。

GJK算法的最初⽬的是计算两个凸体之间的距离,在两个物体穿透深度⽐较⼩的情况下,可⽤它判定物体之间的碰撞。

它也可以和别的算法相结合,⽤来检测两个物体之间深度穿透时候的碰撞情况。

凸体前⾯说过,GJK算法只适⽤于凸体形状。

凸体(其实就是⼀条直线穿越凸体,和该凸体壳的交点不能超过2个)的定义在介绍SAT算法时讲过,可参照那篇⽂章了解相关信息。

明可夫斯基和GJK算法中使⽤了明可夫斯基和的概念。

明可夫斯基和很好理解,假设有两个物体,它们的明可夫斯基和就是物体1上的所有点和物体2上的所有点的和集。

⽤公式表⽰就是:A +B = {a + b|a∈A, b∈B}如果两个物体都是凸体,它们的明可夫斯基和也是凸体。

对于减法,明可夫斯基和的概念也成⽴,这时也可称作明可夫斯基差。

A –B = A + (-B) = {a + (– b)|a∈A, b∈B} = {a – b)|a∈A, b∈B}接着往下讲,在两个物体之间执⾏明可夫斯基差操作的解释如下:如果两个物体重叠或者相交,它们的明可夫斯基差肯定包括原点。

图1: 两个凸体相交我们看⼀个例⼦,图1中两个物体进⾏明可夫斯基差操作,将得到图2的形状。

可以看到,该形状包含原点,这是因为这两个物体是相交的。

碰撞检测算法研究

碰撞检测算法研究

碰撞检测算法研究摘要:实时碰撞检测是机器人、动画仿真、虚拟现实等领域中一个非常关键的问题,其基本任务是确定两个或多个物体彼此之间是否发生接触或穿透。

尤其是随着3D游戏日渐盛行,物体之间的干涉和碰撞检测得到广泛的研究,碰撞检测技术所面临的问题也日益突出,具有很重要的意义。

主要对一些碰撞检测算法作出全面了解、透彻分析。

关键词:碰撞检测;层次包围体;空间剖析1 碰撞检测技术概述碰撞检测(Collision Detection,CD)也称为干涉检测或者接触检测,是基于现实生活中一个普遍存在的事实:两个不可穿透的对象不能共享相同的空间区域。

碰撞检测作为虚拟现实系统中的一个关键组成部分,主要的任务是判断物体模型之间、模型与场景之间是否发生了碰撞,以及给出碰撞位置、穿刺深度等信息。

碰撞检测算法一般可以分为两步:一是初步检测阶段:也就是将大多数明显的不相交的物体进行快速的排除;另一个是详细检测阶段(也可以称为精确检测阶段)。

一些算法将详细检测阶段详细的划分为两个阶段:①逐步求精,在初步检测的基础上进一步继续将检测的范围缩小;②精确求交,在“逐步求精”的基础上,对所建的模型进行相交测试,详细的测试出潜在的相交区域。

二是由于现实工程中的需要,碰撞检测算法得到了很好的发展和创新,因此产生了很多碰撞检测算法如图1所示。

碰撞检测算法大体上可以分为基于物体空间的碰撞检测算法和基于图像空间的碰撞检测算法。

在基于物体空间的碰撞检测算法中又分为采用一般表示模型的碰撞检测算法和采用空间结构碰撞检测算法。

采用采用空间结构碰撞检测算法包括空间剖析法和层次包围体法。

这里将主要介绍空间结构碰撞检测算法。

层次包围盒法:直接对两个物体对象的几何体执行碰撞测试,其计算过程代价过于高昂,尤其是当物体包含许多个多边形的时候。

为了减少计算消耗,在几何相交测试之前,通常先执行物体的包围体测试。

层次包围盒方法的基本思想是用一个简单的包围盒将复杂不规则的几何对象围住,当两个对象作碰撞检测时,如果对象的包围盒不相交,则对象肯定不相交。

基于模拟退火遗传算法的凸多面体间碰撞检测算法研究

基于模拟退火遗传算法的凸多面体间碰撞检测算法研究

摘 要 :提 出用 顶点 的 凸包 来表 示 凸 多面体 , 两 凸物 体 间距 离 的 问题 归结 为 一个 带约 束条 将
件 的非 线性规 划 问题 。利用模 拟退 火遗传 算 法对 该 问题进 行 求 解 , 利用 模 拟 退 火 的接 收准 即 则来 交叉 、 变异 。结果表 明,该 算 法有较高 的计算效 率 和计 算速度 。 关键 词 : 撞检 测 ;凸多面体 ;非线 性规划 ;模 拟退 火遗传 算法 碰
法。
画等 领域具 有 重要 的研究 意义 。碰撞 检测 问题 基
于现 实生 活 中一个 普 遍 存 在 的事 实 : 两个 不 可 穿 透 的对象不 可 能共享 相 同的空 间 区域 。 ] 求解 物体 间最短 距离 是碰 撞检测 的关 键技 术
文 中的方 法是将 距离 的计算 问题归结 为带约
V 12 , . o. 9No 1 F b 2 0 e. 0 8
基 于模 拟 退火 遗 传 算 法 的 凸多 面体 间碰 撞 检 测 算 法 研 究
夏 云 飞 赵 ,
(. 春 T业 大 学 计算 机科 学 与 2 程 学 院 , 林 长 春 1长 I : 吉
伟h
10 1 ;2 吉林 大 学 计 算 机 科 学 与 技 术 学 院 ,吉 林 长 春 10 1 ) 30 2 . 跟踪 两个 多 面体 之 间 该 的最 近点来 计算 它 们 之 间 的距 离 , 当距 离 小 于 或
等 于零 时 , 两者就 发生 了碰撞 。 目前 , 在这方 面著
束 条件 的非 线性 规 划 问题 , 用 模 拟退 火 遗 传 算 利
2. le eo m p trS in ea dTe h oo y,Jl ie st Co lg fCo u e ce c n c n lg ii Unv riy,Ch n c u 3 01 n a g h n 1 0 2,Chi ) na

【国家自然科学基金】_连续碰撞检测_基金支持热词逐年推荐_【万方软件创新助手】_20140803

【国家自然科学基金】_连续碰撞检测_基金支持热词逐年推荐_【万方软件创新助手】_20140803

推荐指数 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2010年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
科研热词 预破碎 闵可夫斯基和 连续碰撞检测 线性约束 稀相气固两相流 碰撞检测 相位多普勒测速仪pda 湍流变动 流式映射 柔性物体 在线可替换单元 图形硬件 包围盒 动力学仿真 刚体 八叉树 opencl 90°弯管
推荐指数 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2011年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
2011年 科研热词 推荐指数 包围盒 2 颗粒堆积 1 闵可夫斯基和 1 速度驱动的离散多层级模型力觉合成算法 1 连续碰撞检测 1 质谱 1 裂解规律 1 虚拟墙 1 网格单元 1 离散元 1 碰撞检测 1 碰撞 1 皂苷 1 电流闭环控制策略 1 检测 1 构造法 1 机器鱼 1 接触检测 1 惯性约束聚变 1 并行碰撞检测 1 层次包围盒 1 定性处理算法 1 失稳机理 1 多更新率控制策略 1 基于等效阻抗的稳 1 在线可替换单元 1 力觉模拟 1 力觉交互系统(his) 1 分离轴 1 仿真平台 1 仿刺参 1 任务分配 1
2012年 序号
科研热词 1 脑机交互数 1 1 1
2013年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
科研热词 推荐指数 连续碰撞 1 连续时隙状态 1 近红外光谱 1 贮藏期 1 船舶碰撞 1 绝对坐标方法 1 猕猴桃 1 混合防碰撞算法 1 检测跟踪 1 标签估算 1 柔性机械臂 1 极限学习机 1 抓取 1 射频识别 1 太阳翼 1 多尺度分形特征(mffk) 1 均值漂移(mean-shift)算法 1 图像识别 1 凸多面体 1 仿真 1 minkowski差 1 gjk分离轴 1

gjk算法计算凸多边形之间的距离

gjk算法计算凸多边形之间的距离

GJK(Gilbert-Johnson-Keerthi)算法是一种用于计算凸多边形之间的最短距离的算法。

该算法也可以用于计算两个任意形状的物体之间的最短距离。

以下是 GJK 算法的基本步骤:
1. 初始化:
•选择一个初始的搜索方向。

•选择一个初始的简单x包络体(Simplex)。

2. 迭代:
1.搜索:
–在搜索方向上移动包络体,找到离原点最远的点。

2.包络体更新:
–根据新找到的点,更新包络体。

包络体可以是线段、三角形、四面体等,具体形状取决于迭代过程中找到的点的数量。

3.判断包络体包含原点:
–检查新的包络体是否包含原点。

如果包含,则两个凸多边形相交,距离为零。

4.最近点计算:
–如果包络体没有包含原点,计算包络体上离原点最近的点。

3. 收敛:
•迭代直到找到距离足够小的最近点,或者确定两个凸多边形相交。

实现细节:
•包络体的选择和更新是 GJK 算法的关键。

可以使用线段、三角形或四面体作为包络体,并根据包络体的形状进行迭代。

•为了优化算法,通常会使用 EPA(Expanding Polytope Algorithm)算法来进一步细化最近点的位置。

•GJK 算法通常用于物理引擎中的碰撞检测和距离计算。

这只是 GJK 算法的基本概述,实际的实现可能需要更多的数学和计算几何知识。

如果你需要具体的实现代码,建议查阅相关的计算几何和物理引擎的文档或资源。

碰撞检测技术研究综述

碰撞检测技术研究综述

碰撞检测技术研究综述作者:冯立颖来源:《计算机时代》2014年第08期摘要:碰撞检测在图形学、仿真、动画和虚拟现实等技术中得到广泛的研究,这些研究具有十分重要的意义。

文章对二维空间中多边形等面模型间相交,以及三维空间中多面体等体模型间干涉的角度对碰撞检测技术的研究和发展作了较为全面的论述,并对几种常用的碰撞检测算法进行了分析和比较,最后对碰撞检测算法的发展方向提出了几点建议。

关键词:虚拟现实;碰撞检测;层次包围盒;干涉中图分类号:TP391 文献标志码:A 文章编号:1006-8228(2014)08-07-04A survey on collision detection technologyFeng Liying(Information Technology Office of YanShan University, Qinhuangdao, Hebei 066004,China)Abstract: The collision detection problem among objects is widely studied in graphics,simulation, animation and virtual reality technologies. A comprehensive introduction of study and development of the problem is given from the aspects of the intersection between face models in 2D,such as polygon, and the interference between body models in 3D, such as polyhedron. Some collision detection algorithms are briefly analyzed and compared. Some suggestions of development of collision detection algorithms are proposed.Key words: virtual reality; collision detection; bounding volume hierarchies; interference0 引言数字化、信息化是当今国内外高科技发展的潮流和趋势,随着计算机软硬件技术的快速发展,尤其是图形处理器以及与之相关的三维游戏,虚拟仿真等技术的兴起,碰撞检测技术再次成为计算机仿真领域研究的热点之一。

基于凸壳的高密度点集物碰撞检测算法

基于凸壳的高密度点集物碰撞检测算法

基于凸壳的高密度点集物碰撞检测算法
唐培和;蒋联源;宋佩华;苏勤
【期刊名称】《计算机工程与应用》
【年(卷),期】2008(044)016
【摘要】提出了一种基于凸壳的高密度点集物碰撞检测算法.根据高密度点集物紧密性好的特点,设计了一种快速的凸壳算法;当极值比较不能确定待检测点集物未碰撞时,用该算法计算待检测点集物的凸壳,并对凸壳进行求交运算,若不相交,两点集物未发生碰撞,否则在两凸壳的交集区域中寻找碰撞点集.算法简单、高效、可靠,在教育、国防、艺术等方面具有一定应用价值.
【总页数】3页(P51-53)
【作者】唐培和;蒋联源;宋佩华;苏勤
【作者单位】广西工学院,计算机工程系,广西,柳州,545006;广西工学院,计算机工程系,广西,柳州,545006;广西师范学院,教务处,南宁,530001;广西师范大学,计算机科学系,广西,桂林,541004
【正文语种】中文
【中图分类】TP391.9
【相关文献】
1.基于二维凸壳的平面点集Delaunay三角网算法 [J], 毕硕本;陈东祺;颜坚;郭忆
2.基于凸壳技术求解二维点集对称轴的方法 [J], 张华梅;高满屯;张桂梅
3.基于栅格划分构建平面点集凸壳的算法研究 [J], 张大远;刘玉树
4.基于散乱点集空间划分的凸壳体快速生成算法 [J], 范志坚;赵翠莲;施晓磊;孙亮
5.基于改进凸壳理论的遮挡油茶果定位检测算法 [J], 李立君;阳涵疆
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于GJK的凸体快速连续碰撞检测研究作者:刘丽等来源:《河北科技大学学报》2014年第05期摘要:针对一段时间内的多个运动物体之间的碰撞检测,提出一种基于距离算法(GilbertJohnsonKeerthialgorithm,GJK算法)的凸体快速连续碰撞检测算法,该算法主要通过判断一段时间内两物体之间的最小距离是否为零来检测碰撞发生情况。

首先利用GJK算法在有限步骤内计算得到最小距离,检测两物体是否发生碰撞;若两物体发生碰撞,进而利用raycasting算法确定发生碰撞的精确位置,根据环境要求做出相应响应,调整运动物体位置。

仿真结果表明,对多个运动物体间的连续碰撞检测,该算法有较高的实时性和准确性。

关键词:连续碰撞;GJK算法;运动物体;碰撞检测;凸体中图分类号:TP391.9文献标志码:AAbstract:This paper presents a fast continuous collision detection algorithm to dealing with moving multiple convex objects within a period of time, which is based on the GilbertJohnsonKeerthi algorithm. The algorithm is determined by whether the minimum distance between the two objects within a period of time is zero to detect the occurrence of a collision. First,the algorithm utilizes GJK algorithm to calculate the minimum distance between the two objects and to detect the collision in finite steps. If two objects collide, then, determine the precise collision position of two objects based on the raycasting algorithm, and respond according to the environmental requirements, adjust two objects' location. The simulation results show that this algorithm has high realtime and accurate characteristics for continuous collision detection between multiple moving objects.Key words:continuous collision; GilbertJohnsonKeerthi(GJK) algorithm; moving objects; collision detection; convex objects碰撞检测在计算机图形学、CAD/CAM、虚拟现实、虚拟制造、三维游戏等诸多领域都有广泛的应用,是提高虚拟场景物理真实感的关键问题之一[14]。

按照场景模式不同,碰撞检测主要分为静态检测和动态检测。

动态检测针对场景中至少存在一个运动物体的情况;根据碰撞检测方式的不同,动态检测分为离散检测和连续检测[5]。

离散碰撞检测算法是对运动物体进行取样检测,因此容易造成漏检测,进而产生穿透现象[6]。

针对两物体间的穿透现象,连续碰撞检测算法通过对一段连续时间内物体的运动过程进行建模,判断两物体之间的碰撞情况,可以很好地解决漏检测问题[6],但计算量相对较大。

目前,虚拟环境的场景复杂度越来越高,对碰撞检测的实时性及准确性的要求也越来越高。

因此,提高检测实时性及准确性是连续碰撞检测要解决的关键问题。

经过多年发展,目前已有多种连续碰撞检测算法,主要有基于扫描实体的算法[78],应用Minkowski和与球面高斯映射相结合的方法[9],保守前进算法及其改进算法[10],基于GJK的算法[1113]以及张应中等提出的线性连续碰撞检测(linear continuous collision detection,LCCD)算法[13]等。

其中,基于扫描实体的方法及应用Minkowski和与球面高斯映射相结合的方法计算量都较大,不适合实时碰撞检测;基于CA及其改进算法虽然提高了检测精度和速度,但其本质仍属于基于步长的碰撞检测;LCCD算法适用于简单凸体之间的碰撞检测。

为提高碰撞检测的快速性及精确度,针对多个凸体之间的连续碰撞检测,本文提出一种基于GJK的快速连续碰撞检测(fast continuous collision detection,FCCD)算法。

该算法以Minkowski差集为工具,可在有限步骤内计算得到两物体间的最小距离,检测两物体是否发生碰撞,加快碰撞检测速度,并利用raycasting算法计算得到凸体间第一次发生碰撞的位置,及时作出碰撞响应。

最后通过仿真对本文算法和LCCD算法进行了比较,仿真结果表明该算法具有较高的实时性和准确性。

1GJK算法概述GJK算法是本文算法的基础,下面对GJK算法涉及到的相关几何理论、概念以及GJK算法的基本理论进行介绍。

1.1相关定义定义1:d单形体是指d维空间内,仿射无关的点集形成的凸包。

如0是单形体是指一个点;1是单形体是指一条线段;2是单形体是指一个三角形;3是单形体是指一个四面体[14]。

GJK算法通过在CSO边界上降序迭代求得CSO中距离原点最近的点。

在每次迭代过程中,在CSO中生成一个单形体,并且确保其所含顶点比上一次迭代中产生的单形体更接近于原点。

定义Wk是在第k次迭代过程中生成的单形体,始终包含1到4个顶点;vk是这个单形体中距离原点最近的点,通过“距离子算法”(或Johnson算法)计算得到vk[14]。

对于凸体对象,GJK算法可通过有限步的迭代运算返回最终结果。

GJK算法的迭代过程如下。

初始条件时,W0=,v0为CSO中任意点。

1)初始化单形体Wk为CSO中一个或多个顶点(最多为4个)。

2)通过距离子算法计算得到vk。

3)若vk为原点,则原点就在CSO中,A,B两物体发生碰撞。

GJK算法结束并返回“A,B相交”。

4)针对Wk中不包含顶点vk的子单形体,将其顶点从单形体中移除。

5)令wk=SA-B(-vk)为-vk方向上的支撑点。

6)与顶点vk比较,若点wk在-vk方向上并非极值点,即‖vk‖2+SA-B(-vk)·(-vk)=0,则结束迭代过程,并返回“A和B不相交”。

由原点指向顶点vk的向量长度‖vk‖即为A和B 之间的距离。

7)否则,将wk添加至单形体Wk中并返回步骤2)。

2快速连续碰撞检测算法本文以GJK算法为基础,通过判断一段时间内2个凸体间判断一段时间内两物体之间的最小距离是否为零来检测是否发生碰撞。

如果两物体发生碰撞,则通过射线与凸体相交的方法得到碰撞发生的位置,根据环境要求做出响应。

本文算法分为2步进行,第1步为碰撞检测,快速检测碰撞是否发生;第2步为碰撞响应,计算碰撞发生的位置。

2.1检测碰撞文献[15]与文献[16]提出了应用GJK算法实时计算二维平面中2个线性运动物体之间的最小距离。

本文对其算法进行推广,应用到检测三维空间中两凸体之间是否发生碰撞。

1)问题描述本算法应用于有多个运动物体的场景,需要对场景中的物体进行两两检测。

为不失一般性,假设场景中的2个运动物体分别为A和B,在时间区间[t0,t1]内,A和B均做匀速直线运动,其速度为常量,分别为vA和vB。

在迭代过程中,若Wk包含一个点,那么,距离子算法返回a,d,Ok,O_in=false。

如果Wk包含2个点,首先检查O是否在2个点的运动轨迹之间,如果运动轨迹之间包含原点,令O_in=true,并停止迭代,返回“A和B碰撞”。

2.2碰撞响应碰撞响应的最终目的是当检测到两物体发生碰撞时,根据环境要求及时调整物体状态,避免发生穿透现象。

因此,碰撞响应需要计算得到碰撞发生时物体的位置。

在时间区间[t0,t1]内,A和B的位移向量分别为T1和T2。

由式(5)和式(6)可得,T1=Δt·vA,T2=Δt·vB。

为简化过程,令物体B处于相对静止状态,因此物体A的相对位移向量(相对于物体B)定义为T=T1-T2。

因此,T=Δt·(vA-vB)。

由定义可得,C=A-B。

在t0时刻,C0=A0-B;在t1时刻,C1=A1-B,又有A1=A0+T。

由此,可得C1=C0+T。

也就是说,在时间区间[0,1]内,CH(C)是运动的,其位移向量与物体A的相对位移向量相同,均为T[13]。

由于CH(C)是运动的,原点是静止的。

为进一步简化计算过程,考虑CH(C)是静止的,原点相对于CH(C)是运动的,其相对位移向量为-T,如图4所示。

由图4可知,碰撞发生时运动物体A的位置可由t0时刻的位置加上一个位移向量得到。

这个位移向量的大小和方向与原点相对路径所在射线与CSO的第一个交点指向原点的向量相等。

因此,在碰撞响应中,最主要的就是要确定射线与CSO的第1个交点[13]。

文献[17]提出了raycasting算法来获得射线与凸体的交点,本文将此算法进行推广,计算原点相对路径所在射线与CSO的第1个交点。

3仿真及分析本文以Microsoft Visual Studio 2010为开发平台,标准C++语言实现算法。

实验环境设置如下:操作系统为Microsoft Windows7;CPU为Intel Core i3 M 330,2.13 GHz;内存为4 GB。

为验证本文算法的有效性及实时性,建立三维场景复杂度不同的场景进行测试。

选取具有多个大小不同的正方体作为实验对象,正方体由程序生成,并且每个正方体移动方向和速度为随机生成,当2个正方体发生碰撞时,物体的颜色由绿色变为红色,当两物体分开后,物体颜色恢复绿色,如图5所示。

通过改变场景中正方体的个数来控制场景复杂度。

当场景中正方体数量为50个时,碰撞检测时间约为0.5 ms,当正方体数量增加到500个时,碰撞检测时间只有4.9 ms,能够满足实时性要求。

通过在不同复杂度下的场景的测试,对本文的快速碰撞检测算法FCCD和张应中等提出的LCCD算法[13]的碰撞检测效率进行了比较,并记录了一段时间内的平均检测时间,仿真实验结果如图6所示。

相关文档
最新文档