C++ 矩形重叠的数据结构

C++ 矩形重叠的数据结构,c++,collision-detection,rectangles,C++,Collision Detection,Rectangles,我在指定的空间中有一组矩形,它们可以有不同的尺寸和位置 我需要检测碰撞簇,一组相互相交的矩形,如附图所示,其中我有两个簇(进入红色框) 简单的方法是用这些矩形的向量,用双循环检查交叉点,比如 for (size_t i = 0; i < rectangles.size(); i++) { for (size_t j = i + 1; j < rectangles.size(); j++) { if (rectangles.at(i).intersect(rectangle

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

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

简单的方法是用这些矩形的向量,用双
循环检查交叉点,比如

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
    }
  }
for(size_t i=0;i
我不认为这是执行微积分最有效的方法

如何有效地计算这些簇?我读过一些关于使用四叉树进行平面划分的文章,但我不知道在这种情况下如何使用它们。是合适的数据结构还是有更有效的方法(我必须以软实时方式处理)


如果情况允许,使用a肯定是一个不错的调用,不过要确保您有足够的对象来承担创建和维护结构的开销

除此之外,如果你只使用矩形,简单检查一个矩形的最大X值与另一个矩形的最小X值,Y的相同值应该是可以的。如果没有,并且你没有使用凹面对象,这是一种很好的检测方法,如果你推够它,它甚至可以拉伸3d。我非常喜欢separ的一点如果需要的话,它也会产生碰撞响应,因为它可以返回最小向量来移动形状


如果你陷入困境,上面的一些人会有很多关于进一步碰撞检测和响应的建议。

相关:@Vaughto R-Tree是解决我问题的正确选择,你同意吗,还是我犯了一个错误?我的直觉是,使用扫描线方法将获得更好的性能。可能你是对的。我将研究位这些解决方案。谢谢你的帮助。谢谢。我知道如何执行矩形碰撞,但我不知道什么是最好的数据结构,以尽量减少碰撞测试。我已经看到@VaughnCato告诉我使用R-树数据结构和分离轴定理,我应该获得良好的性能。足够公平。请记住这是公平的“分离轴定理可能只会更好,因为如果对象不容易被矩形包围,那么碰撞的精确度会更高。虽然它很有效,但它不如简单的大于/小于检查那么快。@Jepessen