Этот тип пересечения легко осуществляется с помощью идеи «мин максимальных значений» и «максимума мин». Для того, чтобы написать это нужно определенное понятие для прямоугольника, и, просто чтобы сделать вещи ясно, что я буду использовать namedtuple:
from collections import namedtuple
Rectangle = namedtuple('Rectangle', 'xmin ymin xmax ymax')
ra = Rectangle(3., 3., 5., 5.)
rb = Rectangle(1., 1., 4., 3.5)
# intersection here is (3, 3, 4, 3.5), or an area of 1*.5=.5
def area(a, b): # returns None if rectangles don't intersect
dx = min(a.xmax, b.xmax) - max(a.xmin, b.xmin)
dy = min(a.ymax, b.ymax) - max(a.ymin, b.ymin)
if (dx>=0) and (dy>=0):
return dx*dy
print area(ra, rb)
# 0.5
Если вы не любите namedtuple обозначения, вы могли бы просто использовать:
dx = max(a[0], b[0]) - min(a[2], b[2])
и т. Д. Или любые другие обозначения, которые вы предпочитаете.
Итак, в чем проблема? Если вы знаете все угловые точки, вы можете легко вычислить угол прямоугольника пересечения. Координаты углов и функции 'min' и' max' должны быть все, что вам нужно. – cel
действительно ли может вычислить угол прямоугольника пересечения? –
Я этого не знаю. Тем не менее, я уверен, что вы можете понять, как вы можете самостоятельно вычислить эти углы. Посмотрите на верхний левый угол. Чтобы быть на перекрестке, вы должны иметь x_coord, по крайней мере, такой же большой, как и красные и синие левые концы, и y_coord максимум минимум красных и синих верхних концов ... у вас есть аналогичные аргументы для каждой из четырех угловых точек. – cel