`

碰撞检测

阅读更多

在游戏开发中,经常需要进行碰撞检测算法的实现,例如判断前面是否有障碍以及判断子弹是否击中飞机,都是检测两个物体是否发生碰撞,然后根据检测的结果通过碰撞检测算法做出不同的处理。

进行碰撞检测算法的物体可能有些的形状和复杂,这些需要进行组合碰撞检测,就是将复杂的物体处理成一个一个的基本形状的组合,然后分别进行不同的检测。

下面简单介绍一下两种最基本的形状进行碰撞的时候进行的处理。

1、矩形和矩形进行碰撞检测算法

一般规则的物体碰撞都可以处理成矩形碰撞,实现的原理就是检测两个矩形是否重叠。我们假设矩形1的参数是:左上角的坐标是(x1,y1),宽度是w1,高度是h1;矩形2的参数是:左上角的坐标是(x2,y2),宽度是w2,高度是h2。

在检测时,数学上可以处理成比较中心点的坐标在x和y方向上的距离和宽度的关系。即两个矩形中心点在x方向的距离的绝对值小于等于矩形宽度和的二分之一,同时y方向的距离的绝对值小于等于矩形高度和的二分之一。 下面是数学表达式:

x方向:| (x1 + w1 / 2) – (x2 + w2/2) | < |(w1 + w2) / 2|

y方向:| (y1 + h1 / 2) – (y2 + h2/2) | < |(h1 + h2) / 2|

在Java ME程序中,只需要将上面的条件转换成代码就可以实现了。

但是矩形碰撞只是一种比较粗糙的碰撞检测算法,因为很多实际的物体可能不是一个规则的矩形。

下面介绍一下圆形碰撞。

2、圆形和圆形的碰撞检测算法

圆形和圆形的碰撞应该说是一种最简单的碰撞,因为在数学上对于两个圆形是否发生重叠,有计算两个圆心之间的距离的公式。那么条件就变为:计算两个圆心之间的距离是否小于两个圆的半径和。

假设圆形1的左上角坐标是(x1,y1),半径是r1,圆形2的左上角的坐标是(x2,y2),半径是r2。

因为MIDP1.0中没有浮点数,而且浮点数的运算比较慢,所以我们将条件做一个简单的变换:对于条件的两边都进行平方,这样就去掉了开方的运算步骤。

下面是数学表达式:

(x1 – x2)2 + (y1 – y2)2 < (r1 + r2)2

在Java ME程序中,只需要将上面的条件转换成代码就可以了。

上面介绍的只是最基本的碰撞检测算法的实现,而实际的编程过程中遇到的碰撞检测问题要比这些复杂很多,还需要其他形式的检测,还需要进行更加深入的学习。

分享到:
评论

相关推荐

    程序中几何图形间的距离计算(碰撞检测)

    还有其它的一些碰撞检测也可以从这些碰撞检测之间演变过去。就看你是否具备这个智慧了... 1:矩形碰撞 2:点与矩形碰撞 3:线段与线段碰撞 4:点圆碰撞 5:点与圆环的碰撞 6:像素碰撞 7:直线与矩形碰撞 8...

    stl模型碰撞检测.txt

    这个是我在做一份作业的时候用到的三维碰撞检测方法。 对于两个模型中的每一个三角形,总共会有6种情况, 1)两个三角形形成的平面的交线上没有上述两个三角形之一 2)有其中一个在交线上 3)两三角形在同一...

    碰撞检测:实时碰撞检测+bullet3碰撞检测库

    本资源用于碰撞检测: 1.bullet3库:用于检测碰撞及最小距离,常用在游戏建模、机器人等应用中 2.Real-Time Collision Detection,一个包含实时碰撞检测算法原理+代码的文档 3.CVPR2022:将bullet用于深度学习中的...

    实时碰撞检测算法技术

    《实时碰撞检测算法技术》详细阐述了与碰撞检测问题相关的高效解决方案及相应的数据结构和算法,主要包括:碰撞检测系统中的设计问题、数学和几何学入门、包围体、基本图元测试、层次包围体技术、空间划分、BSP树...

    AABB碰撞检测算法

    利用AABB算法对两个物体进行碰撞检测,物体采用三角面片表示,算法输入两个物体碰撞的三角面片对及碰撞检测时间等信息

    《实时碰撞检测算法技术》

    内容简介 《实时碰撞检测算法技术》详细阐述了与碰撞检测问题相关的高效解决方案及相应的数据结构和算法,主要包括:碰撞检测系统中的设计问题、数学和几何学入门、包围体、基本图元测试、层次包围体技术、空间划分...

    机械臂碰撞检测 八组逆解碰撞检测 机械臂避障路径规划

    将末端姿态代入机械臂逆运动模型中,求出八组逆解角度,将八组逆解角度代入机械臂正运动学方程,判断机械臂与障碍物是否发生碰撞,进行碰撞检测,以实现机械臂避障路径规划。

    三维场景漫游中碰撞检测问题的研究与实现

    碰撞检测问题是三维场景漫游的技术难点$ 论文在对国内外已有碰撞检测算法进行分析比较的基础上针对三维城市景观系统的数据特点#提出了基于回避三角形分割的二叉空间分割算法的碰撞检测算法 经实践证明该算法对于场景...

    matlab开发-fast3碰撞检测gjkalgorithm

    matlab开发-fast3碰撞检测gjkalgorithm。凸三维物体的碰撞检测算法。

    AABB包围盒碰撞检测算法1

    1. AABB包围盒 在游戏中,为了简化物体之间的碰撞检测运算,通常会对物体创建一个规则的几何外形将其包围 2. 二维场景中的AABB碰撞检测原理 

    一种快速精确的连续碰撞检测算法.pdf

    为了实现运动刚体间快速精确的碰撞检测,提出了一种新的连续碰撞检测算法.利用图形硬件的计算能力,该算法在每个时间区间上实时处理,把单个时间区间划分成若干个子时间区间,使用静态和连续的定向包围盒(OOB)相交性检测...

    基于八叉树的OBB包围盒碰撞检测

    碰撞检测技术是大规模复杂场景渲染的关键技术之一 ,它可以有效地提高虚拟环境的真实感和沉浸感 。碰撞检测的研 究目标是如何在很高的实时交互要求下完成大量复杂物体的相交检测 。提出一种将场景图中的 OBB包围盒以...

    基于BIM技术的地铁工程碰撞检测研究

    论述了碰撞检测的种类以及应用BIM技术进行碰撞检测的方法,以广州地铁9号线岐山车辆段工程和伦敦维多利亚地铁站扩建工程为例,研究了如何应用BIM模型进行碰撞检测、软碰撞检测以及间隙碰撞检测。该项目使用BIM技术后...

    fcl flexible collision library 碰撞检测库源码

    fcl flexible collision library 碰撞检测库源码

    Android范围碰撞检测

    实现了矩形碰撞检测和圆形碰撞检测,android2.2系统

    一个很好的碰撞检测例子(精确到球和面片)

    opengl碰撞检测例子,球和三角面片的碰撞检测

    物理碰撞检测实例

    这里对于cocos2d-x 3.0 的新物理引擎的物理碰撞检测单独抽离出来测试

Global site tag (gtag.js) - Google Analytics