有效地组重叠矩形

时间:2011-12-10 23:18:01

标签: c++ python algorithm boost computer-vision

分组重叠矩形的最佳方法是什么?我尝试过使用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),假设我没有错过任何内容并且每个步骤只需{ {1}}。

问题:

1)需要使用Equivalence Classes或其他东西来正确合并矩形组。 Boost有这样的东西吗?

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

3)假设确实没有实现这一点的事情,有没有人有一些建议来改进我的方法?

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

1 个答案:

答案 0 :(得分:0)

我会查看pygame.Rect.collide方法来回答您的问题。由于矩形重叠检测在游戏中非常常见,我猜它们的实现在计算复杂性方面非常好。