Если предположить, что прямоугольник должен быть параллелен x
и y
оси, что, как представляется, ситуация из предыдущих комментариев и ответов.
Я еще не могу написать комментарий, но я хотел бы указать, что оба предыдущих ответа, похоже, игнорируют случай, когда один боковой прямоугольник полностью находится в стороне от другого прямоугольника. Пожалуйста, поправьте меня, если я ошибаюсь.
Рассмотрим случай
a: (1,1), (4,4)
b: (2,2), (5,3)
В этом случае мы видим, что для пересечения, высота должна быть bTop - bBottom
, так как вертикальная часть b
целиком содержится в a
.
Нам просто нужно добавить еще несколько случаев: (код может быть закорочен, если вы обрабатываете верх и низ как то же самое, что и правое и левое, так что вам не нужно дублировать условный фрагмент дважды, но это должен делать.)
if aRight <= bLeft or bRight <= aLeft or aTop <= bBottom or bTop <= aBottom:
# There is no intersection in these cases
return 0
else:
# There is some intersection
if aRight >= bRight and aLeft <= bLeft:
# From x axis point of view, b is wholly contained in a
width = bRight - bLeft
elif bRight >= aRight and bLeft <= aLeft:
# From x axis point of view, a is wholly contained in b
width = aRight - aLeft
elif aRight >= bRight:
width = bRight - aLeft
else:
width = aRight - bLeft
if aTop >= bTop and aBottom <= bBottom:
# From y axis point of view, b is wholly contained in a
height = bTop - bBottom
elif bTop >= aTop and bBottom <= aBottom:
# From y axis point of view, a is wholly contained in b
height = aTop - aBottom
elif aTop >= bTop:
height = bTop - aBottom
else:
height = aTop - bBottom
return width * height
Что вы придумали до сих пор? – Gumbo
Вы хотите сказать, что 2 прямоугольника находятся в ящике с заданными координатами? – sgowd
@ sans481 Да, я исправил вопрос спасибо. –