矩形重叠的数据结构

时间:2014-08-27 13:37:47

标签: c++ collision-detection rectangles

我在指定的空间中有一组矩形,它们可以有不同的尺寸和位置。

我需要检测碰撞聚类,一组相互交叉的矩形,如附图所示,其中我有两个聚类(红色框)。

琐碎的方法是使用这些矩形的矢量,并使用双for循环检查交叉点,像

for (size_t i = 0; i < rectangles.size(); i++) {
  for (size_t j = i + 1; j < rectangles.size(); j++) {
    if (rectangles.at(i).intersect(rectangles.at(j)) {
      // Add rectangle[j] to cluster in which rectangle[i] is
    }
  }

我不认为这是执行微积分的最有效方式。

如何有效地计算这些集群?我已经阅读了有关使用四叉树的平面分区的内容,但我不知道在这种情况下如何使用它们。它是适当的数据结构还是更有效的方式(我必须以软实时方式处理它)。

I have two clusters (grouped in red)

1 个答案:

答案 0 :(得分:3)

如果情况允许,使用quad tree肯定是一个很好的调用,尽管确保你有足够的对象来创建和维护值得它的结构的开销。

除此之外,如果你只是使用矩形,那么简单检查一个矩形的最大X值与另一个矩形的最小X和Y的相同。如果没有,并且你没有使用凹面物体,separating axis theorem是一种很好的检测方法,如果推得足够的话,甚至可以伸展3d。我真正喜欢分离轴定理的一件事是,如果你需要它,它也会产生碰撞响应,因为它可以返回最小的矢量来将形状移出彼此。

如果你遇到问题,game-dev上的一些人会有更多关于进一步碰撞检测和响应的指示。

相关问题