Python. Найти пересечение двух прямоугольников

На собеседовании получил задачку:

Есть два прямоугольника. У каждого известны координаты левый верх и правый низ. Нужно написать функцию, которая ответила бы на вопрос о том, пересекаются ли эти прямоугольники.

Задачку я решил с помощью массивов и собеседование давно закончилось, но подозреваю, что решение не достаточно хорошее:

def gen_rectangle(cords):
  """Генерирует массив координат всех занимаемых прямоугольником точек"""
  rectangle = []
  for i in range(cords[0][0], cords[1][0]):
    for j in range(cords[0][1], cords[1][1]):
      rectangle.append((i, j))
  return rectangle


def intersection(cord1, cord2):
  """Есть ли пересечение"""
  rectangle1 = gen_rectangle(cord1)
  rectangle2 = gen_rectangle(cord2)
  
  for i in rectangle1:
    for j in rectangle2:
      if i == j:
        return 'We have intersection!'
  return 'All good'


cord1 = ((1, 1), (4, 8))   # первый прямоугольник
cord2 = ((3, 3), (16, 20)) # второй прямоугольник
print(intersection(cord1, cord2))

Например: если прямоугольники будут ну очень большими, то каждая занимаемая одним прямоугольником точка - это два int, такое решение не оптимально расходует память. Как мое решение можно улучшить?


Ответы (1 шт):

Автор решения: вася
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y


def intersection(l_1, r_1, l_2, r_2):
    if (l_1.x >= r_2.x or l_2.x >= r_1.x):
        return False

    if (l_1.y <= r_2.y or l_2.y <= r_1.y):
        return False

    return True


l_1 = Point(2, 2)
r_1 = Point(4, 1)
l_2 = Point(3, 2)
r_2 = Point(4, 0)

print(intersection(l_1, r_1, l_2, r_2))

Можно заменить нестрогие неравенства на строгие, в зависимости от условий.

→ Ссылка