有效地对重叠的矩形进行分组

Posted

技术标签:

【中文标题】有效地对重叠的矩形进行分组【英文标题】:Efficiently Group Overlapping Rectangles 【发布时间】:2011-12-10 23:18:00 【问题描述】:

对重叠矩形进行分组的最佳方式?我尝试过使用 OpenCV,但 grouprectangles 方法无法按预期工作。

我想过做这样的事情:

L = [every rectangle]
L_next = []
while not L.empty():
    for rectangle in L:
        L.remove(rectangle)
        for other_rectangle in L:
            if rectangle overlaps with other_rectangle:
                L_next += rectangle + other_rectangle
    L = L_next
    L_next = []

由于每个未合并的矩形都将从下一个列表中删除,因此在最坏的情况下,我将有 n/2 外部循环的迭代。两个内部循环应该执行nn - 1 次,因此在最坏的情况下,算法应该大致为O(n^3),假设我没有遗漏任何内容并且每个步骤只需要O(1)

问题:

1)需要使用等价类或其他东西来正确合并矩形组。 Boost有类似的东西吗?

2)这似乎是一种必须经常进行的操作,所以我很惊讶没有找到更多的材料。这是怎么回事?

3) 假设确实没有什么东西已经实现了,有没有人有一些建议来改进我的方法?

4) 查看两个矩形是否重叠的最佳方法是什么?

【问题讨论】:

【参考方案1】:

我会查看 pygame.Rect.collide 方法来解决您的问题。由于矩形重叠检测在游戏中非常普遍,我想它们的实现在计算复杂度方面相当不错。

【讨论】:

以上是关于有效地对重叠的矩形进行分组的主要内容,如果未能解决你的问题,请参考以下文章

随机将N个圆放置在矩形中而没有重叠

旋转矩形的近似重叠面积

计算两个矩形列表的重叠

怎样判断平面上一个矩形和一个圆形是否有重叠

OpenCV groupRectangles - 获取分组和未分组的矩形

在 MySQL 中对重叠的数据范围进行分组