基于GJK的凸体快速连续碰撞检测研究
凸多面体连续碰撞检测的运动轨迹分离轴算法
凸多面体连续碰撞检测的运动轨迹分离轴算法1. 引言- 研究背景和目的- 研究现状和不足- 研究方法和思路2. 数学模型与理论基础- 凸多面体的定义和性质- 连续碰撞检测的定义和原理- 分离轴算法的基本原理3. 运动轨迹分离轴算法- 算法的核心思想- 算法的具体实现流程- 算法的时间复杂度分析4. 实验结果与分析- 实验环境和参数设置- 实验结果分析与评估- 实验效果分析与对比5. 结论- 本文的主要贡献和创新性- 算法的局限性和未来发展方向- 总结和展望注:本提纲仅供参考,具体内容应根据实际需求进行调整和拓展。
1. 引言凸多面体连续碰撞检测是计算机图形学、机器人动力学、游戏开发等领域中重要的问题之一。
其主要目的是检测两个凸多面体在未来一段时间内是否会发生碰撞,从而能够在事故发生前进行预测和避免。
常见的方法包括分离轴算法、基于特征点的方法和边缘算法等。
其中,分离轴算法因为其高效性和准确性而被广泛使用。
然而,分离轴算法仅适用于静态场景,并且仅能检测两个凸多面体之间的相互碰撞。
在动态场景中,若存在多个凸多面体同时运动,在未来的一段时间内进行连续的碰撞检测就成为了一个十分具有挑战性的问题。
因此,我们需要开发一种新的算法来解决这个问题。
本文旨在提出一种运动轨迹分离轴算法,通过当前的位置、角度、速度和加速度等相关信息,对凸多面体的运动轨迹进行迭代检测,实现多个凸多面体之间的连续碰撞检测。
此外,本文还将对该算法进行详细的分析,包括运动轨迹分离轴的选择和计算、时间复杂度分析等。
同时,通过实验验证,本文将进一步证明该算法的准确性和可靠性。
本文的组成包括以下几个部分:首先,将介绍研究背景和目的,并探讨当前凸多面体连续碰撞检测领域中的研究现状和不足。
接下来,将详细介绍数学模型和理论基础,包括凸多面体、连续碰撞检测和分离轴算法等。
随后,将详细介绍运动轨迹分离轴算法的基本思路、实现方法及时间复杂度分析。
最后,通过实验结果与分析,将验证该算法的准确性和有效性,并总结和展望本文的研究工作。
(转)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
推荐指数 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(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], 李立君;阳涵疆
因版权原因,仅展示原文概要,查看原文内容请购买。
lc算法和gjk算法的工作过程
文章标题:深度解析LC算法和GJK算法的工作过程1. 背景介绍LC算法和GJK算法都是在计算机图形学和计算机游戏开发中广泛应用的算法。
它们分别用于解决凸多边形碰撞检测和凸多边形间距离计算的问题。
在本文中,我们将深入探讨这两种算法的工作过程,帮助读者更好地理解它们的原理和应用。
2. LC算法的工作过程LC算法的全称是"Linear-time Collision"算法,它主要用于解决凸多边形碰撞检测的问题。
该算法的工作过程如下:2.1. 构建几何包围盒:对于每个凸多边形,需要构建一个几何包围盒,以便快速判断多边形是否相交。
2.2. 分离轴定理:LC算法利用了分离轴定理,通过检测多边形的边界是否相交来判断它们是否发生碰撞。
2.3. 碰撞检测:将上一步得到的分离轴投影到x和y轴上,然后检测投影的重叠情况,从而判断凸多边形是否发生碰撞。
3. GJK算法的工作过程GJK算法的全称是"Gilbert-Johnson-Keerthi"算法,它主要用于计算凸多边形间的最短距离。
该算法的工作过程如下:3.1. 初始化:选择一个起始点作为搜索方向,并求解该方向上的最优点。
3.2. 找到最远点:在搜索方向上找到离原点最远的点,作为下一次搜索的方向。
3.3. 判断原点位置:重复上一步,直到原点位于凸多边形间的最短距离上。
4. 对LC算法和GJK算法的总结和回顾LC算法和GJK算法分别解决了凸多边形碰撞检测和凸多边形间距离计算的问题。
它们的工作原理巧妙而高效,可以在实时计算中得到广泛应用。
对于程序员和游戏开发者来说,深入理解这两种算法的原理和工作过程,将有助于提高对碰撞检测和最短距离计算的理解和能力。
5. 个人观点和理解作为一种经典的计算几何算法,LC算法和GJK算法的工作原理虽然较为复杂,但其核心思想却非常直观和巧妙。
通过深入学习和理解这两种算法,不仅可以提高对计算几何的理解和应用能力,还可以为实际工程中的碰撞检测和距离计算问题提供更加高效和精确的解决方案。
凸多面体快速碰撞检测的投影分离算法
凸多面体快速碰撞检测的投影分离算法1. 引言- 凸多面体快速碰撞检测的意义和应用- 目前凸多面体快速碰撞检测的研究现状2. 前置知识- 3D坐标系及基本操作- 凸多面体的定义和属性- 线性代数中的向量和投影概念3. 投影分离算法的原理与实现- 投影分离算法的基本原理- 具体的算法实现步骤- 代码实现及优化策略4. 实验分析- 数据集的选择与设计- 算法精度的测试与分析- 算法效率与优化比较- 实验结果的分析和讨论5. 总结与展望- 本文算法的优缺点及其应用领域- 对未来凸多面体快速碰撞检测的发展趋势的预测和展望- 其他可能的研究方向和问题解决探讨凸多面体快速碰撞检测是计算机图形学领域中的一项重要技术,它的应用范围广泛,例如在三维游戏、虚拟现实、机器人机械学、仿真模拟等领域中都有着重要的应用。
该技术的目的是要判断两个凸多面体是否存在碰撞,即它们是否相交;如果相交,则需要进一步计算它们碰撞的详细信息以及可能造成的影响。
凸多面体快速碰撞检测可以被看作是计算几何学问题的一种特定形式,涉及到对多个凸多面体的边界、面、顶点等几何信息进行高效的计算和处理,因此它也是计算机图形学和计算几何学交叉的重要领域。
目前,凸多面体快速碰撞检测已经成为计算机图形学研究和开发中的一个重要热点和前沿领域。
由于现实中涉及到的凸多面体数量往往非常庞大,而且它们的位置、形状和朝向等信息也可能会经常变化,因此针对凸多面体快速碰撞检测,已经有很多优秀的算法被提出,例如投影分离算法、包围盒算法、分离轴定理等等。
这些算法的提出,大大地提高了凸多面体快速碰撞检测的效率和准确性,使得它的应用场景更加广泛。
本文的重点是介绍凸多面体快速碰撞检测中的投影分离算法。
该算法原理简单、实现简单,是目前应用最为广泛的一种算法之一。
本文将介绍该算法的具体实现步骤、算法精度的测试与分析、算法效率与优化比较,并对该算法进行全面的总结和展望。
通过本文的介绍,读者可以深入了解凸多面体快速碰撞检测领域的最新研究进展和技术发展趋势,同时也能够掌握一个行之有效的快速碰撞检测算法,让计算机图形学和计算几何学领域的工作者们得以更好地应对现实中的计算多面体问题。
GJK碰撞检测算法的研究及改进的开题报告
GJK碰撞检测算法的研究及改进的开题报告1. 选题背景和意义碰撞检测在计算机动画、游戏物理模拟、机器人导航、虚拟现实等领域都有着广泛应用。
GJK算法是一种高效的碰撞检测算法,在实际应用中具有较高的性能表现。
然而,在复杂场景下,GJK算法存在运算速度慢、算法稳定性差等问题,需要进一步研究和改进,以提高算法的精度和效率。
本研究将重点探索GJK算法在碰撞检测中的应用、原理及其存在的问题,并尝试通过改进算法的具体实现方式,提高算法的速度和稳定性,从而进一步优化碰撞检测的效果。
2. 研究内容和方法2.1 研究内容(1)GJK算法的原理及其在碰撞检测中的应用。
(2)分析现有GJK算法存在的问题,如运算速度慢、算法稳定性差、对形状表达方式有特殊要求等。
(3)针对现有问题,探索改进算法的具体实现方法。
比如采用分层次策略(hierarchical strategy)来提高效率、使用特定算法解决三角剖分(triangulation)问题等等。
(4)通过对比分析,评估改进算法的实用性和效果。
2.2 研究方法(1)阅读相关文献,深入了解GJK算法的基本原理及其在碰撞检测中的应用场景。
(2)分析现有算法的优缺点和存在问题,找出需要改进的关键点。
(3)设计和实现针对性的改进算法,从实验和对比分析的角度评估改进算法的效果和速度表现。
3. 预期研究结果本研究预期能够针对现有GJK算法的不足之处,提出一些新的算法改进方案,从而进一步提高碰撞检测算法的效率与精确度。
同时,通过数值实验和算法的对比分析,对改进算法的实用性和效果进行评估,为后续碰撞检测领域的研究提供一定的参考和思路。
一种快速精确的连续碰撞检测算法
一种快速精确的连续碰撞检测算法
黄通浪;唐敏;董金祥
【期刊名称】《浙江大学学报(工学版)》
【年(卷),期】2006(040)006
【摘要】为了实现运动刚体间快速精确的碰撞检测,提出了一种新的连续碰撞检测算法.利用图形硬件的计算能力,该算法在每个时间区间上实时处理,把单个时间区间划分成若干个子时间区间,使用静态和连续的定向包围盒(OBB)相交性检测方法,计
算出在子时间区间内的潜在碰撞集(PCS),并结合基于图形硬件的可靠碰撞剔除方法、三角面片之间的碰撞检测方法和回退方法,计算出刚体间的初始碰撞时刻和碰撞位置.并应用于一个三维建模系统中的装配模块.实验结果表明,与传统的碰撞检测方法相比,该算法可以缩短计算时间,具有更好的性能和精度.
【总页数】5页(P1051-1055)
【作者】黄通浪;唐敏;董金祥
【作者单位】浙江大学,计算机科学与工程学系,浙江,杭州,310027;浙江大学,计算机科学与工程学系,浙江,杭州,310027;浙江大学,计算机科学与工程学系,浙江,杭
州,310027
【正文语种】中文
【中图分类】TP3
【相关文献】
1.一种快速的基于云计算的碰撞检测算法 [J], 李菲
2.一种快速的可变形物体的碰撞检测算法 [J], 谭睿璞;赵伟
3.一种快速的双重层次包围盒碰撞检测算法 [J], 刘超;蒋夏军;施慧彬
4.一种基于八叉树与流水线技术的快速碰撞检测算法 [J], 李山;赵伟;李菲
5.一种快速的变电站高压警戒区域碰撞检测算法 [J], 陈皓;胡亚平;颜璟仪;汤彧;胡娟
因版权原因,仅展示原文概要,查看原文内容请购买。
一种基于GPU的碰撞检测算法
一种基于GPU的碰撞检测算法
苏诺;季桂树;邓拓
【期刊名称】《计算机系统应用》
【年(卷),期】2009(018)009
【摘要】实时碰撞检测是计算机图形应用中不可缺少的组成部分.随着高性能可编程图形处理器(GPU)的发展,出现了许多利用GPU来解决复杂物体间的碰撞检测问题的方法.提出了一种基于GPU的对参数化表面的碰撞检测方法.通过使用几何图像表示的参数化表面,实时的生成Gpu优化的包围体层次结构.然后在这个层次结构的基础上实现优化的基于GPU的层次碰撞检测算法.结果显示本方法可以有效的提高碰撞检测的速度,相对于在CPU上实现同样的层次结构遍历方法,基于GPU的方法可以将碰撞检测速度平均提高13%左右.
【总页数】5页(P65-68,33)
【作者】苏诺;季桂树;邓拓
【作者单位】中南大学信息科学与工程学院,湖南,长沙,410083;中南大学信息科学与工程学院,湖南,长沙,410083;中南大学信息科学与工程学院,湖南,长沙,410083【正文语种】中文
【中图分类】TP3
【相关文献】
1.基于GPU流计算模式的非凸体碰撞检测算法的研究 [J], 张雪飞;刘书桂;刘新凯
2.一种基于OBB矩形碰撞检测算法的r堆取料机防碰撞方法 [J], 尹艳艳;吕崇晓
3.一种基于半透明颜色叠加与深度值的碰撞检测算法 [J], 李普;孙长乐;熊伟;王海涛
4.一种基于GPU的快速Kirsch边缘检测算法 [J], 黄轩
5.基于一种碰撞检测算法的液压机械臂柔顺性分析 [J], 刘纯键;高红星;蒋林;周玲;赵慧
因版权原因,仅展示原文概要,查看原文内容请购买。
凸多面体连续碰撞检测的运动轨迹分离轴算法
凸多面体连续碰撞检测的运动轨迹分离轴算法张应中;范超;罗晓芳【期刊名称】《计算机辅助设计与图形学学报》【年(卷),期】2013(025)001【摘要】This paper presents a new linear continuous collision detection algorithm for convex polyhedrons, which employs separating-axis calculation of motion path based on Gilbert-Johnson-Keerthi distance algorithm (GJK). First, the algorithm utilizes the supporting point and projection technology to remove those objects that can not be collided in order to speed up the collision detection. Then, the convex hull that is calculated with Minkowski difference set between two possible collision convex objects and the one-dimensional simplex constructed by a relative motion path are implemented with the GJK separating-axis algorithm to complete the collision detection in the entire time interval immediately. Finally, by means of solving the intersection between the hyper-plane and the ray based on a geometric method, the nearest intersection point of the hyper-plane and the ray from a convex object's boundary can be calculated. The first collision position is determined and the moving object's location is adjusted to complete the process of collision response. The proposed algorithm does not require constructing a swept body and intersection calculations between convex polyhedrons in continuous detection process. The proposed algorithm has been applied to thecontinuous collision detection among oriented bounding boxes. The experimental results and analysis show that this algorithm has high detection accuracy and response speed.%针对凸体间的连续碰撞检测,在距离算法(Gilbert-Johnson-Keerthi distance algorithm,GJK)基础上,提出一种采用运动轨迹分离轴计算的线性连续碰撞检测算法.该算法首先采用支撑点和投影技术,剔除必定不发生碰撞的物体,以加速碰撞检测的速度;然后,对可能发生碰撞的物体,计算2个凸体的Minkowski差集,所形成的凸包与运动路径执行GJK分离轴算法,实现在整个时间区间内一次性完成碰撞检测任务;最后,采用几何方法以及超平面与射线求解方式计算射线与凸体边界近交点,确定出第一次发生碰撞位置,并调整运动物体位置,完成碰撞响应过程.该算法不需要构造扫掠体,连续检测过程中不需要凸体间的求交计算.将文中算法应用于物体方向包围盒的连续碰撞检测,算法分析和实验结果表明,该算法对包围盒的连续碰撞检测具有较高检测精度和响应速度.【总页数】8页(P7-14)【作者】张应中;范超;罗晓芳【作者单位】大连理工大学机械工程学院大连 116024;大连理工大学机械工程学院大连 116024;大连理工大学机械工程学院大连 116024【正文语种】中文【中图分类】TP391.9【相关文献】1.基于模拟退火遗传算法的凸多面体间碰撞检测算法研究 [J], 夏云飞;赵伟2.凸多面体碰撞检测的棱线投影分离算法 [J], 张智;邹盛涛;李佳桐;张乐乐;李超3.凸多面体快速碰撞检测的投影分离算法 [J], 黎自强4.基于遗传算法的凸多面体间碰撞检测算法研究 [J], 金汉均;李朝晖;张晓亮;郭亚军5.一个基于启发式分离向量搜索的凸多面体碰撞检测算法 [J], 李学庆;孟祥旭;杨承磊;王文平;KelvinChung;SiuMingYiu因版权原因,仅展示原文概要,查看原文内容请购买。
gjk算法原理
gjk算法原理GJK算法原理GJK算法(Gilbert-Johnson-Keerthi算法)是一种用于计算两个凸多边形之间最小距离的算法。
它的原理非常简单,但是却非常高效,被广泛应用于物理引擎、碰撞检测和凸包求解等领域。
GJK算法的核心思想是通过迭代逼近,逐渐找到两个凸多边形之间的最小距离。
其具体步骤如下:1. 初始化:选取一个初始点p0,并将其作为迭代的起点。
2. 迭代:在每一次迭代中,根据当前的迭代点集,计算新的迭代点。
这个新的迭代点是迭代点集的凸包中的一个顶点。
如果迭代点集的凸包包含原点,则两个凸多边形相交,可以提前结束迭代。
否则,继续进行下一次迭代。
3. 终止条件:当新的迭代点和原点的距离小于一定阈值时,认为找到了最小距离,并结束算法。
在每一次迭代中,关键是如何计算新的迭代点。
这一步骤可以通过Minkowski差集来实现。
Minkowski差集是指将一个凸多边形的每个顶点与另一个凸多边形的所有顶点进行相减,得到的所有减向量的集合。
通过计算Minkowski差集,可以得到一个新的点集,称为支撑点集。
支撑点集是一个凸多边形,它包含了两个凸多边形之间的所有可能的最小距离点。
然后,通过寻找支撑点集的凸包,可以得到新的迭代点。
迭代点是凸包的顶点,它离原点最远,因此可以用来逼近两个凸多边形之间的最小距离。
为了提高算法的效率,可以使用一种称为GJK迭代的改进方法。
在GJK迭代中,每次迭代时,根据一些启发式规则,选择一个新的迭代点。
这种启发式规则可以减少计算量,加速算法的收敛速度。
总结一下,GJK算法是一种简单而高效的算法,用于计算两个凸多边形之间的最小距离。
它通过迭代逼近的方式,找到两个凸多边形之间的最小距离点。
通过计算Minkowski差集和支撑点集的凸包,可以得到新的迭代点。
最终,当新的迭代点和原点的距离小于一定阈值时,认为找到了最小距离,并结束算法。
通过使用启发式规则,可以进一步加速算法的收敛速度。
基于可见性查询的凸体碰撞检测算法
基于可见性查询的凸体碰撞检测算法
徐建国;张友良
【期刊名称】《图学学报》
【年(卷),期】2009(030)004
【摘要】虚拟制造、机器人路径规划等许多应用都需进行实时的碰撞检测.论文提出一种新的凸体碰撞检测算法,此算法基于主流图形硬件的可见性查询功能,克服了同类图像空间算法需从显存回读大量数据的缺点,并可一次提交多个物体对的碰撞检测.实验表明该算法有效提高了碰撞检测的效率.
【总页数】6页(P107-112)
【作者】徐建国;张友良
【作者单位】南京航空航天大学能源与动力学院,江苏南京210016;南京理工大学机械工程学院,江苏南京210094
【正文语种】中文
【中图分类】TP391
【相关文献】
1.基于Minkowski差构造技术的凸体碰撞检测算法 [J], 李学庆;孟祥旭;汪嘉业
2.基于GPU流计算模式的非凸体碰撞检测算法的研究 [J], 张雪飞;刘书桂;刘新凯
3.一种基于OBB矩形碰撞检测算法的r堆取料机防碰撞方法 [J], 尹艳艳;吕崇晓
4.虚拟手术中基于可碰撞集的软组织自碰撞检测算法 [J], 李艳波;印桂生;张菁;倪军
5.基于GJK的凸体快速连续碰撞检测研究 [J], 刘丽;张国山;邴志刚;刘敏
因版权原因,仅展示原文概要,查看原文内容请购买。
世界碰撞算法原理和总结(satgjk)
世界碰撞算法原理和总结(satgjk)序⾔此⽂出于作者的想法,从各处⽂章和论⽂中,总结和设计项⽬中碰撞结构处理⽅法。
如有其它见解,可以跟作者商讨。
(杨⼦剑,)。
在⼀个世界中,有多个物体,物体可以分为运动的物体和静⽌的物体和地形。
⽽世界是很宽⼴的,本⽂致⼒在处理物体之间的碰撞,地形的碰撞后续处理。
参考:KillerAery的⽂章– 张应中范超罗晓芳2013– 刘丽张国⼭邴志刚刘敏 2014算法分离轴算法另外本⽂中,有些想法是从pbr-book中查询的碰撞算法获得理解Pbr-book中另外基于KillerAery的⽂章中后续的⼀些算法,因为实际项⽬实际需求,顾未加整理。
下⾯都是简述对应的原理,致⼒于⽤最简单的话语描述,后续复杂的讲解,请到参考的链接中查询。
处理流程世界是宽⼴的,同样世界中物体也是多个的。
每个物体⼀直频繁的检测是浪费效率的(毕竟运动的物体和根本碰不到的物体检测完全没必要)。
分为两个阶段:粗检测(筛选出来会碰撞到的物体) – 细检测(两两碰撞检测)GJK算法Gjk算法最初是⽤来算两个物体的具体,之后因为稳定和快捷,可以⽤来初检测碰撞。
原理:是算两个物体的顶点差,其实就是距离,得出顶点距离的集合,算出来的多边形是否包含原点,当包含则两物体相交。
SAT分离轴算法分离轴算法,可以很好的检测出来碰撞点和碰撞点的深度。
原理:当两物体相交,那这两物体从任意⽅向看过去都是相交的。
对应的就是在各个⽅向的投影都有交叠。
粗检测-空间分割四叉树⾯分割⽅法,世界⼤⼩的正⽅体是根节点,同等分割四份如果⼀个物体在⼀个分⽀中,找到最⼩能容纳他的正⽅体分⽀。
⼀般情况是根据x y 来分割。
⼋叉树空间分割法,其实是⽐四叉树多⼀个z的⽅向的分割,是三维的。
松散四叉树/⼋叉树松散⼋叉树其实是为了解决边界问题,当⼀个物体在四叉树边缘不断的从⼀个区域到另⼀个区域会导致节点不断的更新节点,层级也会发⽣变化,为了解决这⼀问题,提出了两个概念。
判断两个凸多面体是否相交的一个快速算法
判断两个凸多面体是否相交的一个快速算法
任世军;洪炳熔;孟庆鑫
【期刊名称】《软件学报》
【年(卷),期】2000(011)004
【摘要】在机器人路径规划中,碰撞检测算法占有十分重要的地位.在智能机器人仿真系统中,碰撞检测耗用的时间在整个路径规划过程所用时间中占有相当大的比例.于是,如何进一步提高碰撞检测的速度在智能机器人路径规划系统中就起到了非常关键的作用.而碰撞检测问题最终转化为判断三维空间中两个凸多面体是否相交的问题.就这一问题,给出了一种新的算法,其思想是取一个从一个凸多面体指向另一个多面体的向量,根据两个多面体中的面与这一向量的相对位置关系来寻找相交的平面.即有两个多面体的交点位于这一平面,若能找到一个相交平面则可以断定两个多面体相交.
【总页数】6页(P563-568)
【作者】任世军;洪炳熔;孟庆鑫
【作者单位】哈尔滨工程大学机电工程学院,哈尔滨,150001;哈尔滨工业大学计算机科学与工程系,哈尔滨,150001;哈尔滨工业大学计算机科学与工程系,哈尔
滨,150001;哈尔滨工程大学机电工程学院,哈尔滨,150001
【正文语种】中文
【中图分类】TP242
【相关文献】
1.判断简单多边形的核是否为空的一个快速算法 [J], 王钲旋;徐长青;庞云阶
2.判定由线性不等式围成的凸空间是否为空的一个快速算法 [J], 任世军;洪炳熔
3.一个计算凸多面体间碰撞点的快速算法 [J], 王兆其;赵沁平;汪成为
4.判断两个凸多面体相交的简单方法 [J], 周水生;容晓锋;周利华
5.计算两个凸多面体间距离的一个新算法 [J], 周水生;容晓锋;周利华
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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所示。