ich über Schnittrechtecke auf lesen überlappen:Achstests Trennen, Erkennen, ob ein gedrehtes Rechteck ein anderes flaches Rechteck
Algorithm to detect intersection of two rectangles?
Aber ich habe Mühe, es zu implementieren.
Wenn R1 (A, B, C, D) mein gedrehtes Rechteck und R2 (A ', B', C ', D') das andere Rechteck ohne Drehung ist.
Die Formel von der Verbindung oben in extrahiert ist:
edge = v(n) - v(n-1)
Sie eine senkrecht dazu erhalten können, indem sie um 90 ° dreht. In 2D ist so einfach wie:
rotated.x = -unrotated.y
rotated.y = unrotated.x
// rotated: your rotated edge
// v(n-1) any point from the edge.
// testpoint: the point you want to find out which side it's on.
side = sign (rotated.x * (testpoint.x - v(n-1).x) +
rotated.y * (testpoint.y - v(n-1).y);
Mein gedrehten Kanten von R1 mit
AB (xB-xA, Yb-YA) so gedreht x sein werden, ist xB-xA? BC (Xc-xB, YC-y1) CD ... AD ...
Prüfgewicht wird A sein 'B', C 'D' von R2 Also muss ich überprüfen, das Zeichen das Ergebnis aller Punkte von R2 gegen die 4 Kanten von R1. Das sind 16 Vergleiche, wenn sie sich schneiden. Woher weiß ich, ob ich eine Trennkante gefunden habe?
Dank