2009-03-07 8 views
2

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

Antwort

2

Wenn für eine gegebene Kante, nicht die Zeichen von jeder der Punkt zur Prüfung der gegen die Kante übereinstimmen, dann haben Sie eine Kreuzung. Das Vorzeichen des Skalarprodukts ist für alle Punkte auf einer Seite der Linie gleich.

Verwandte Themen