Was ist ein schneller Weg, um zu testen, ob sich zwei Rechtecke schneiden?
Eine Suche im Internet ergab diesen Einzeiler (WOOT!), Aber ich verstehe nicht, wie man ihn in Javascript schreibt, er scheint in einer alten Form von C ++ geschrieben zu sein.
struct
{
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT;
bool IntersectRect(const RECT * r1, const RECT * r2)
{
return ! ( r2->left > r1->right
|| r2->right < r1->left
|| r2->top > r1->bottom
|| r2->bottom < r1->top
);
}
javascript
c++
language-agnostic
graphics
Der Blitz
quelle
quelle
r2->right left
macht keinen Sinn. Möglicherweise ist es aufgrund von HTML-Problemen fehlerhaft.<
Symbole sind, weil HTML entkommen ist.Antworten:
So kann dieser Code in JavaScript übersetzt werden. Beachten Sie, dass Ihr Code und der des Artikels einen Tippfehler enthalten, wie in den Kommentaren vorgeschlagen. Insbesondere
r2->right left
sollter2->right < r1->left
undr2->bottom top
sollte sein,r2->bottom < r1->top
damit die Funktion funktioniert.Testfall:
quelle
Dies setzt voraus, dass die
top
normalerweise kleiner als istbottom
(dh dass diey
Koordinaten nach unten zunehmen).quelle
<=
in<
funktionieren.=
für jede Bedingung entfernen kann und die Rechtecke die Ränder "berühren" können.Auf diese Weise implementiert .NET Framework Rectangle.Intersect
Oder die statische Version:
quelle
Ein anderer einfacher Weg. (Dies setzt voraus, dass die y-Achse nach unten zunimmt).
Die 4 Zahlen (Max und Min) in der obigen Bedingung geben auch die Schnittpunkte an.
quelle
Dies hat einen Rect-Typ, den Sie verwenden können. Es ist bereits JavaScript.
https://dxr.mozilla.org/mozilla-beta/source/toolkit/modules/Geometry.jsm
quelle
Ich habe eine Mischung von Methoden verwendet, um ein kleineres Rechteck innerhalb eines großen Rechtecks zu erkennen. Dies ist eine NodeJS-Methode, die Breite / Höhe verwendet, aber leicht angepasst werden kann.
quelle