我有一组相互重叠的矩形。我需要检测一组矩形中是否存在重叠。如果存在重叠,那么我需要更新坐标,以便矩形集不再重叠。我想知道是否有适合此任务的python库。
此操作将应用于百万+矩形集,因此算法效率和利用GPU也很重要。
答案 0 :(得分:1)
GEOS的形状接口可能是您正在寻找的库,但我从未将其用于此目的。
在这种情况下,自己滚动可能更容易。该算法是一种简单的扫描线算法,每个矩形的平均复杂度与log(N)成正比。
A)每个矩形的特征是四个坐标,左,右,上,下。
B)将按照左坐标
的顺序处理矩形c)间隔树用于维护遇到左边缘且尚未遇到右边缘的每个矩形的上下范围
D)维护一个优先级队列,按右边缘排序,当前位于间隔树中的所有矩形
1)获取要处理的第一个或下一个矩形。如果没有更多可用,请退出。
2)当优先级队列上的任何元素的优先级小于或等于此矩形的左侧值时,从优先级队列中删除该元素,并从间隔树中删除相关元素。
3)搜索间隔树以与该矩形的上下范围重叠;处理每个重叠发现。
4)将此矩形的上下范围插入到间隔树中,并将元素添加到优先级队列,优先级设置为矩形中的右值,指的是添加到间隔树的间隔。
5)返回步骤1)以获得下一个矩形。