【问题标题】:2D Polygon Collision Detection2D 多边形碰撞检测
【发布时间】:2012-11-04 23:19:19
【问题描述】:

有谁知道一个简单的方法来检查两个多边形,尤其是矩形,是否发生碰撞?我找到了一种简单的方法来查看两个矩形是否接触,只需检查两个矩形上的任何线是否发生碰撞,但如果一个多边形在另一个多边形中,这将不起作用。有谁知道一种更有效的方法或只是一种有效的方法?

另外,有人可以给我一个公式或类似的东西,而不仅仅是你对这个主题的想法。

谢谢

【问题讨论】:

标签: c++ collision-detection


【解决方案1】:

查找分离轴定理。有教程here

它快速、优雅、健壮、不太难,并且有很多资源。

【讨论】:

【解决方案2】:

查看http://www.metanetsoftware.com/technique/tutorialA.html

在开发我自己的碰撞检测例程时,该网站给了我无限的帮助。根据可用处理能力的大小,您可以在碰撞精度方面做任何您想做的事情。从最少的处理器密集型开始:

1) 边界框:适用于矩形形状并且可以快速启动。您只需要知道对象的 (x, y) 位置及其宽度和高度。

2)分离轴定理(SAT):能够处理更复杂的形状并且相当直观。

3) SAT with Voronoi Regions (VR):使用任何给定多边形的哪个顶点最接近的信息,以减少计算总数。

以上所有内容都在上面的链接中进行了深入解释。应该注意的是,到目前为止,所提到的方法对凸多边形最有效。如果你想达到荒谬的准确度,你就开始进行位图测试之类的事情,这种测试速度非常慢,而且几乎对任何事情都过分了。

【讨论】:

    【解决方案3】:

    有几种方法,简单的就是检查X或Y边界是否有重叠。然而,这只适用于与轴对齐的矩形。

    有边界检查,一个对象的角是否在另一个对象的坐标范围内。

    从那里碰撞检测变得更加先进。检查是否有一条线可以在它们之间在任何方向上绘制等等。

    【讨论】:

    • 顺便说一下,我提到的最后一个方法是分离轴定理。一个人使用什么取决于一个人究竟需要什么。
    【解决方案4】:

    例子:

    矩形A

    左上角 (x,y)。宽度、高度。

    矩形B

    左上角 (x1,y1)。

    条件

    (x>=x1) 和 (x x 轴的碰撞。对于 y 轴,这相同,但具有 y 和 y1 以及高度。

    【讨论】:

      猜你喜欢
      • 2015-07-24
      • 2013-03-09
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多