【问题标题】:Collision detection of irregular shapes不规则形状的碰撞检测
【发布时间】:2012-07-07 06:06:02
【问题描述】:

我知道如何检查一个圆是否即将与一个正方形发生碰撞,并且我知道如何检测一个正方形是否将与一个正方形发生碰撞,但是我将如何检测一个多边形是否即将发生碰撞用正方形?

或者更好的是,当多边形即将与多边形发生碰撞时。

或者更好的是,当由不直的线组成的形状与另一个相似的形状、多边形或圆形/矩形发生碰撞时

有什么方法可以获取一个形状可能占用的像素和另一个形状可能占用的像素,并检查它们是否相同?

我希望有一些不需要大量特定形状计算的解决方案。

我正在使用 javascript 和 html5 画布来执行此操作。

【问题讨论】:

  • @jbabey,我不确定这是不是该问题的重复——在这里,OP 指定了多边形到多边形的要求,而提议的重复项似乎(隐含)只涉及矩形碰撞.不过,我承认很难判断,因为链接的问题忽略了所使用形状的范围;我认为它们是严格的矩形,因为那里的提问者特别提到了divs。

标签: javascript jquery html canvas collision-detection


【解决方案1】:

这不是一个简单的东西。如果您对函数可以判断两个多边形是否正在碰撞感到满意(并且您可以回滚它们),那么解决方案并不难。您只需要检查多边形的任何两个边是否相互交叉。这可以通过一些数学来完成,并且对于大的形状或很多多边形,它可以吃掉性能。为了解决这个问题,您可以使用空间分区和边界卷。

更新: 您可以根据this 计算线的交点。然后你需要检查这个点是否在两个段中。为此,您可以使用线段的端点,如果线段实际包含点,则 ua 和 ub 变量将介于 0-1 之间。

【讨论】:

  • 谢谢,但是算什么数学?这并没有真正帮助我,因为你不可能“没有数学就可以做到”
  • 包含了一些开始的线索,这就够了吗?
  • 我喜欢它,我会给它一个赞成票,但这并不能完全解决我的问题。我不仅需要检查一条线是否相交,还需要检查一个对象是否已经在对象内部并需要移出。
  • 我还需要它来处理没有直线“线”作为边/边框的形状。
  • 也是弯曲的任意多边形?有关于这个主题的重要博士论文,非常复杂。您可能想查看gamma.cs.unc.edu/research/collision - 但也取决于它的用途,您可能想开始考虑一些近似值,例如已经提到的边界框想法,或者您可以尝试对多边形进行三角剖分并使用基本的方式这样做几何
【解决方案2】:

最简单的是使用边界框,只需找到对象的最小值和最大值并从中制作一个框。要对多边形进行多边形处理,您需要一种存储多边形边缘的方法以及另一种确定哪些点或边缘与另一个对象发生碰撞的方法。然后,您可以从这里确定如何对碰撞做出反应。

边界框易于实现,但不是很准确。使用多边形本身的实际边缘更准确,但更难处理,速度也慢得多。

【讨论】:

  • 边界框是一种明显且极其不准确的解决方案,除非您的多边形非常接近矩形。在任何情况下,具有标准形状(即六边形、五边形)的多边形都会比盒子更接近圆形......
  • 同意,在这种情况下,您可以在运行前决定要做什么或执行每个边缘碰撞模型,或者使用圆形或椭圆作为包围体。
猜你喜欢
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多