Diese Art der Kreuzung ist einfach durch die Idee "Min der Maxes" und "Max der Mins" gemacht. Um es zu aufschreiben muss man einen bestimmten Begriff für das Rechteck, und, um nur die Dinge klar Ich werde eine namedtuple verwenden:
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
Wenn Sie nicht die namedtuple Notation mögen, können Sie nur verwenden:
dx = max(a[0], b[0]) - min(a[2], b[2])
usw., oder was immer Sie bevorzugen.
Also was ist dein Problem genau? Wenn Sie alle Eckpunkte kennen, können Sie die Ecke des Kreuzungsrechtecks leicht berechnen. Die Eckkoordinaten und die Funktionen "min" und "max" sollten alles sein, was Sie brauchen. – cel
kann formschön Ecke der Kreuzung Rechteck berechnen? –
Das weiß ich nicht. Aber ich bin mir ziemlich sicher, dass Sie herausfinden können, wie Sie diese Ecken selbst berechnen können. Sehen Sie sich einfach die obere linke Ecke an: Um in der Kreuzung zu sein, müssen Sie eine x_coord haben, die mindestens so groß ist wie das Maximum von Rot und Blau und eine y_coord höchstens das Minimum von Rot und Blau hat ... Sie haben ähnliche Argumente für jeden der vier Eckpunkte. – cel