Ich möchte prüfen, ob eine Linie (oder ein beliebiger Punkt einer Linie) innerhalb eines Rechtecks liegt oder ein Rechteck schneidet.
Ich habe (x0, y0) und (x1, y1) als Anfangs- und Endpunkte einer Linie. Auch (ax, ay) und (bx, by) als die oberen linken und unteren rechten Punkte eines Rechtecks
Zum Beispiel
%Vor%Kann jemand vorschlagen, wie man das macht? Ich will nicht wissen, welcher Punkt das ist, ich will nur wissen, ob es da ist oder nicht.
Vielen Dank für Ihre Hilfe
Der erste und der dritte Fall sind trivial - geben Sie einfach true zurück, wenn sich ein Endpunkt der Zeile innerhalb der Box befindet (d. h. & gt; ax und ay, & lt; bx und by).
Der zweite bringt ein Problem mit sich - wir können uns nicht mehr auf die Endpunkte unserer Linie verlassen. In diesem Fall müssen wir die Linie mit jeder Kante des Rechtecks testen.
Die Gleichung für unsere Linie wird (x1 - x0)*x + (y1 - y0)*y + x0*y0 - x1*y1 = 0
sein, und wir können eine ähnliche Gleichung für jede Seite des Rechtecks unter Verwendung der Ecken konstruieren. Wenn wir dann die Gleichung für die Seiten des Rechtecks in unsere Linie einfügen, erhalten wir den Schnittpunkt.
Abschließend prüfen wir, ob der Punkt innerhalb der Grenzen der Rechteckseite liegt und auch innerhalb des Liniensegments, das wir betrachten.
Es gibt einen ausführlicheren Bericht darüber in dieser Diskussion .
>