So prüfen Sie, ob ein Punkt (oder Teil) einer Linie innerhalb eines Rechtecks ​​liegt oder dieses berührt

9

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

    
user427969 28.01.2011, 01:07
quelle

1 Antwort

5

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 .

>     
Andy Mikula 28.01.2011, 01:18
quelle

Tags und Links