Questo tipo di intersezione è facilitato dall'idea "min of the maxes" e "max of the mins". Per scrivere fuori uno ha bisogno di una nozione specifica per il rettangolo, e, solo per rendere le cose chiare userò un 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
Se non ti piace la notazione namedtuple, si potrebbe utilizzare:
dx = max(a[0], b[0]) - min(a[2], b[2])
ecc., O qualunque altra annotazione tu preferisca.
Quindi qual è il tuo problema esattamente? Se conosci tutti i punti degli angoli, puoi facilmente calcolare l'angolo del rettangolo di intersezione. Le coordinate dell'angolo e le funzioni 'min' e' max' dovrebbero essere tutto ciò di cui hai bisogno. – cel
fa shapely in grado di calcolare l'angolo del rettangolo di intersezione? –
Non lo so. Eppure, sono abbastanza sicuro che puoi capire come puoi calcolare quegli angoli da solo. Guarda l'angolo in alto a sinistra: per essere nell'intersezione devi avere un x_coord grande almeno quanto il massimo delle estremità sinistra del rosso e del blu e un y_coord al massimo il minimo delle estremità superiori del rosso e del blu ... hai argomenti simili per ciascuno dei quattro punti d'angolo. – cel