Я пытаюсь найти эффективное решение для нахождения перекрытия n прямоугольников, где прямоугольники хранятся в двух отдельных списках. Мы ищем все прямоугольники в listA
, которые пересекаются с прямоугольниками listB
(и наоборот). Сравнение одного элемента из первого списка во втором списке может занять очень большое количество времени. Я ищу эффективное решение.
У меня есть два списка прямоугольников
rect = Rectangle(10, 12, 56, 15)
rect2 = Rectangle(0, 0,1, 15)
rect3 = Rectangle (10, 12, 56, 15)
listA = [rect, rect2]
listB = [rect3]
который создается из класса:
import numpy as np
import itertools as it
class Rectangle(object):
def __init__(self, left, right, bottom, top):
self.left = left
self.bottom = right
self.right = bottom
self.top = top
def overlap(r1, r2):
hoverlaps = True
voverlaps = True
if (r1.left > r2.right) or (r1.right < r2.left):
hoverlaps = False
if (r1.top < r2.bottom) or (r1.bottom > r2.top):
voverlaps = False
return hoverlaps and voverlaps
Мне нужно сравнить прямоугольник в listA
для listB
код выглядит следующим образом, который является крайне неэффективным - сравнение по одному
for a in it.combinations(listB):
for b in it.combinations(listA):
if a.overlap(b):
Любой эффективный метод решения этой проблемы?