`
逍遥一狂
  • 浏览: 190564 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

2D游戏凸多边形碰撞检测,分离轴定理算法源码

阅读更多

更新:修改了一个严重bug(算法错误),增加了多边形和圆形碰撞,增加了正矩形和圆形碰撞

 

应用场景:2D游戏凸多边形碰撞,比像素碰撞精确度低点,比方框碰精确度要高。

 

限制条件:2D。不能用于凹多边形,凹多边形得拆分成凸多边形或者三角形来做。运动速度很快了会有穿越效果。不带任何物理,如果需要反弹等等物理效果,就必须上物理引擎了。

 

最佳实践:最好能用盒子先检测一下然后再用分离轴来做碰撞碰撞。否则屏幕上精灵一多还是挺费电的。

 

参考文档

http://www.codeproject.com/KB/GDI-plus/PolygonCollision.aspx

 

参考文档中的代码是ActionScript的,我移植成C99的,附件的包是Xcode项目,不过C源代码可以单提出来用于任何支持C的设备

 

 

C99标准里只有_Bool,没有bool,需要包含头文件<stdbool.h>才可以用bool, true, false,没包含前的编译错误弄得我莫名其妙的

 

还有大家直接用的话最好先充分测试。这个代码写好了只测试了几个例子。如果有命名冲突,得自己搞定,呵呵。

 

分享到:
评论
1 楼 Hioln 2014-03-18  
请问下博主,修改的那个严重bug是什么,可以描述下吗?

相关推荐

    快速多边形碰撞检测

    3. 隔离轴法(Separating Axis Theorem, SAT):找到两个凸多边形之间不存在重叠的轴,如果所有轴上都没有重叠,那么它们没有碰撞。 五、实际应用 在游戏开发中,实时碰撞检测对于玩家控制的角色、敌对单位以及环境...

    凸多边形最小面积四边形包围盒算法

    ### 凸多边形最小面积四边形包围盒算法解析 #### 一、问题背景与研究意义 在计算几何领域,包围盒问题是一项基础而重要的课题。它涉及到如何找到一个最紧凑的简单形状来完全覆盖住一个给定的几何对象。这种需求在...

    2D多边形碰撞算法及示例

    在计算机图形学中,2D多边形碰撞算法是一种核心技术,广泛应用于游戏开发、物理模拟、几何计算等领域。本文将深入探讨这一主题,并通过代码示例和OpenGL演示来阐述其工作原理和实现方法。 首先,我们要理解碰撞检测...

    OpenGL 凸多边形截取线段 Cyrus-Beck 算法

    OpenGL 凸多边形截取线段 Cyrus-Beck 算法 OpenGL 凸多边形截取线段 Cyrus-Beck 算法 OpenGL 凸多边形截取线段 Cyrus-Beck 算法 OpenGL 凸多边形截取线段 Cyrus-Beck 算法 OpenGL 凸多边形截取线段 Cyrus-Beck 算法 ...

    分离轴检测算法

    分离轴检测算法是一种在2D计算机图形学和游戏开发中广泛应用的碰撞检测技术。它主要用于检测多边形对象之间的碰撞,特别是在实时计算和物理模拟中。这种算法基于数学的几何原理,可以高效地判断两个2D多边形是否发生...

    SAT:分离轴定理用于碰撞检测

    分离轴定理是计算机图形学中用于检测3D和2D对象之间是否发生碰撞的一种重要算法。在2D环境中,这个理论尤其适用于处理多边形碰撞。SAT的核心思想是:如果两个对象不相交,那么存在至少一个轴,在该轴上它们的投影...

    论文研究-中轴求凸多边形直径算法.pdf

    中轴的求解方法有多种,比如可以使用扫描线算法配合事件点的处理来求解,或者利用分离轴定理(Separating Axis Theorem, SAT)来求解,还可以采用层次分解的方法,例如二叉空间分割(Binary Space Partitioning, BSP...

    最小凸多边形生成算法——Qt实现

    这个算法在很多领域都有应用,例如数据简化、形状识别、碰撞检测等。Qt是一个跨平台的应用程序开发框架,常用于创建用户界面和桌面应用程序。 在"最小凸多边形生成算法——Qt实现"这个项目中,开发者利用Qt的图形...

    凹多边形凸分解源码和使用说明

    在某些场景中,如碰撞检测、图形渲染等,凹多边形的处理比凸多边形更为复杂。因此,将凹多边形分解为若干个凸多边形,可以使问题简化,提高计算效率。 "二维简单多边形凸分解源代码及使用说明"提供的资源包含了一个...

    凸多边形最优三角剖分(C语言编写) 算法

    凸多边形最优三角剖分是一种在计算机图形学和计算几何领域中常见的问题,它涉及到如何将一个凸多边形分割成尽可能少的互不相交的三角形,同时满足某些优化目标,如最小化某种权值之和,如边界长度、三角形面积等。...

    实时碰撞检测算法技术

    - **分离轴定理(SAT)**:基于多边形的相交测试,适用于刚体碰撞。 - **距离向量法**:计算两个球体或点之间的最小距离来检测碰撞。 - **GJK(Gillies-Jeanny-Kinsey)** 和 **MINKOWSKI** 空间:用于复杂形状的...

    二维多边形碰撞检测

    在2D游戏中,为了实现精灵或物体之间的交互,比如碰撞响应,就需要进行精确的碰撞检测。本文将深入探讨如何使用C# .NET、Windows GDI+以及Visual Studio等工具来实现这一功能。 首先,我们需要理解基本的几何概念。...

    二维多边形的碰撞检测

    二维多边形碰撞检测是计算机图形学中的一个重要概念,它在游戏开发、物理模拟和图形渲染等领域有着广泛的应用。在C#中,我们可以利用GDI+(Graphics Device Interface Plus)库来实现这一功能。GDI+是.NET Framework...

    AABB碰撞检测算法

    4. **精细碰撞检测**:对于初步判断可能存在碰撞的情况,可以使用更复杂的算法,如分离轴定理(Separating Axis Theorem)或基于距离向量的方法,来检查物体的三角面片是否实际接触。 5. **时间滑动(Time of ...

    凹多边形转凸多边形VC6

    在某些算法和应用中,处理凹多边形可能会带来复杂性,因此有时需要将凹多边形转换为由多个凸多边形组成的集合,这个过程称为凸分解。 标题"凹多边形转凸多边形VC6"暗示我们这是一个使用Visual C++ 6.0开发的程序,...

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

    凸体算法适用于检测凸多边形或多面体,这类几何体在游戏和仿真领域应用广泛。基于GPU的碰撞检测利用现代图形处理器强大的并行计算能力,能够显著提高碰撞检测的效率,尤其是在处理复杂场景和大量对象时。 在进行...

    任意凸多边形裁剪凹多边形算法 OpengL实现

    在给定的“任意凸多边形裁剪凹多边形算法 OpenGL实现”主题中,我们将深入探讨如何使用OpenGL库来执行这种复杂的几何操作。 首先,我们来理解一下“凸多边形”和“凹多边形”的概念。凸多边形是指所有边的延长线...

    多边形相交检测demo

    在计算机图形学中,多边形相交检测是一项基础但重要的技术,广泛应用于游戏开发、碰撞检测、几何算法等领域。CocosCreator是一个流行的2D和3D游戏开发框架,它支持多种图形处理和物理模拟功能,包括多边形碰撞检测。...

Global site tag (gtag.js) - Google Analytics