2D旋转矩形碰撞检测..docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2D旋转矩形碰撞检测.

2D旋转矩形碰撞检测(极力推荐)----支持水平镜像(垂直镜像同理,可以自己编写)数学知识 2010-10-05 14:28:40 阅读734 评论0字号:大中小?订阅 最近在用Flash AS3.0写一个ACT游戏,由于要检测攻击碰撞和被攻击碰撞(没有使用像素级碰撞----没有必要),遇到矩形碰撞的问题,就是无法全部满足旋转矩形的需求。MovieClip.hitTestObject()对旋转矩形是不适用的,且非常糟糕。在此自己写了一个。对于这种2D动作游戏来说矩形碰撞是绝对满足要求的,不需要使用像素级碰撞来检测碰撞。 一、必知的一些概念1,Separating Axis Theorem(SAT)(分离轴定律)引用:/~jen/?p=78 什么是STA?SAT為一種可快速偵測不規則凸多邊是否碰撞的演算法,他的概念如下:給予兩個凸多邊形物體,如果我們能找到一個軸,使得兩個在物體在該軸上的投影互不重疊,則這兩個物體之間沒有碰撞發生,該軸並稱為其Separating Axis。?(紅色軸線)對於2D的例子來說,可能存在的Separating Axis為垂直於該多邊形各個邊的軸(紅色軸線)。因此,若我們要檢查兩多邊形是否碰撞,就去檢查兩多邊形在每個所有可能的軸上的投影是否重疊。如果我們找到一個軸,使得兩多邊形在該軸上的投影互不重疊,則我們就可以知道這兩個多邊沒有碰撞發生。(知道判断不重叠就可以退出了)如果是3D case的話,則需要考慮的可能的Saparating Axis包括各個面的normal,還有每個面中,兩兩edge之外積所形成的向量。Metanet Software有一個很棒的互動式SAT教學David Eberly也有發表一篇比較偏講解SAT理論方面的文章Intersection of Convex Objects: The Method of Separating Axes二、旋转碰撞讲解当我着手学校的项目时,我发现必须对翻转的精灵之间实现碰撞检测,开始想到了包围盒但因为对每个像素检测是很耗时而且也没必要,经过几天的摸索,我用SAT(separating axis theorem)高效的实现了它,当我把我的方法结实给我的同学和实验室的技术人员时,我意识到游戏开发组织可能通过清晰而彻底解释过程中获益.此而外线性代数,向量数学是很有用的,但不影响对这篇文章的理解.SAT(Separating Axis Theorem)Separting Axis Theorem 指出了一对不处于碰撞情况的凸多变形,有且一条相对于多变形一条边的垂直轴,并且两个多边形的投影顶点无重叠.如果我们投影这个两个多边形顶点(我们正在对每个垂直于每个多边行边的轴进行测试),然后我们检测每个多边形的重叠并且存在碰撞,即使是一个轴没有没有重叠,那么碰撞是不可能的,实质上它到底有什么意义呢.这种解决方法适用对碰撞检测的可能性,甚至是交叉碰撞.?图1, 交叉碰撞我们在深入碰撞算法之前,使用这个方法得有具备一些前提.首先,虽然分离轴理论可以用来在凸多边形之间检测碰撞,但矩形是在2D中通常碰撞方式,所以我们假设你使用几个矩形.此外还得假设你可以把矩形转换为带有四个向量的结构体,他们每个代表一个角,以标记或组织的方式,而知道哪个角是哪个,(具体来说,我们需要去识别哪些角是相临的---如果左上角一直转到它在矩形的低部为止,只要保持边与左上角和右下角标签相联系.方法检查两个相互旋转矩形碰撞的确是个问题,什么时候能决定他们不相撞.最简单的交叉检测使用m$的IntersesectRect()函数会检测最大/最小的矩形B的值是否在矩形A的最大和最小的值内.这种对方对对称轴矩形工作得很好,但在处理旋转矩形时,我们采用更为复杂的方式图2.标准基于包围的碰撞检测正如你所见的那样.B的最小值x位于被A的最大和最小x所定义的空间中.此外 ,B的最小值y位于被A的最大和最小y定义的空间中的.使用简单的基于包围的碰撞检测,这将登记为碰撞,反之这不会.步骤1这个方法的第一步就是确定我们要往上投影向量的轴.分离轴理论(SAT)指出了,我们必须有一个轴,垂直于我们两个多边形的每个边 图3.八个垂直轴正如你看到的,我们以八个轴结束,你也应该马上看到使矩形的优势,首先,每个边有一条对边(Opposite edge),它共享同一个轴,我们可以利用这个来降低本检测数目,这里只需要四个轴.其次,存在矩形上任意两个相临边的角度为90度.本身而言,对于矩形的任何一个边,两个相临边垂直于它.这就说,我们可以这样计算4个轴:Axis1.x = A.UR.x - A.UL.xAxis1.y = A.UR.y - A.UL.yAxis2.x = A.UR.x - A.LR.xAxis2.y = A.UR.y - A.L

文档评论(0)

gangshou + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档