Wie um zu überprüfen, Schnittpunkt zwischen einer Linie und einem Rechteck?
Der Titel sagt es alle, Ive wurde auf der Suche rund um und konnte nichts finden, das war straight und auf den Punkt. Wie würde ich eine Zeile mit den Punkten (x1,y1) & (x2, y2) und überprüfen Sie die Kreuzung zwischen einem Rechteck (xR,yR)? Ich sah in den Line2D-Paket, dass es einige Schnittpunkte Methoden aber nicht sicher, wie Sie es einrichten. Kann mir jemand zeigen, die richtige Art, die Einrichtung zu prüfen, eine Kreuzung (Kollision)?
- "Danke Dan" enthalten keine sigs. in Fragen. Kollision zwischen
Area
Objekten getan werden kann, relativ einfach. Hier ist ein Beispiel. - Warnung. Da kann man generisch verwenden Java-Bereich-Klasse zu tun Kollision/Kreuzung-Erkennung für fast alle Java-2D-grafische Objekte es ist verlockend, zu denken, es kann verwendet werden für ALLE grafischen Objekte. Aber es kann nicht sein – denn wenn Sie konstruieren eine Fläche für eine 'Linie', der Bereich von der Zeile selbst beginnt leer. Es ist daher Schnittpunkt mit einem anderen Bereich gibt immer leer - auch wenn die Linie überquert in Ihrem anderen Bereich. Sie sind gewarnt worden!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Über die verfügbaren Klassen aus dem 2D-Grafik-API.
Was diese nicht sagen, Sie ist dort, wo...
Rechteck ist 4 Zeilen. Sie könnten berechnen Sie die Schnittmenge zwischen Ihre Linie und die 4 Linien des Rechtecks.
gegeben die Gleichungen der beiden Linien, die Sie schneiden würden, wenn x und y gleich sind.
y = m1x + b1
y = m2x + b2
Lösung der Gleichung, die Sie bekommen sollte:
x = b2 - b1 /(m1 - m2);
Beachten Sie, dass, wenn m1 == m2), die Linien sind parallel und wird nie kreuzen, watch out für die Division durch 0 in diesem Fall.
Dann, da Sie es mit Segmente Rattler als unendliche Linien, überprüfen Sie, ob die Schnittmenge fällt aus, die innerhalb Ihrer Segmente (überprüfen Sie, ob sowohl X als auch Y sind in jedem segment-Grenzen).
Gibt null zurück, wenn die Linien nicht überschneiden. Modifizierte c-code aus einer anderen Antwort auf ähnliche Frage, um die es Java. Habe nicht die Mühe gemacht, zu schauen, wie/warum es funktioniert, aber es macht den job, ich brauchte es.