XNA-line-segment-intersection?
Können sagen, wir haben 4 Vector2
's (ja, das ist 2d), so haben wir lineOneStart, lineOneEnd, lineTwoStart und lineTwoEnd.
Wie kann ich erkennen, ob die 2 Linien kreuzen? I don ' T care, wo Sie sich kreuzen, ich will nur wissen, ob Sie sich überschneiden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie diese Formel durch Bourke.
Ich kürzlich zu lösen hatte dieses Problem auch. Eine weitere option ist die Verwendung (immer) die Gleichung der Linie (
y = mx + c
), aber es gibt einige Grenzfälle, die Sie benötigen, zu beschäftigen, sowie eigentlich der überprüfung, ob der Schnittpunkt innerhalb des Segments. Die Formel in dem link oben funktioniert, aber ich kann nicht wirklich sagen, wie die Gleichung re-arrangiert, alles, was ich sage ist, es funktioniert 😉Bearbeiten:
Erwähnt AndiDog, eine andere Website, die ich verwendet (das Beispiel ist auch ausgezeichnet) ist diese tutorial. Da dies XNA-der zweite link ist rechts oben Ihre Straße.
Bearbeiten (Inhalte aus broken link):
Den Gleichungen der Linien
Pa = P1 + ua ( P2 - P1 )
undPb = P3 + ub ( P4 - P3 )
Lösung für den Punkt, wo
Pa = Pb
gibt die folgenden zwei Gleichungen in zwei unbekannten (ua und ub)x1 + ua (x2 - x1) = x3 + ub (x4 - x3)
und
y1 + ua (y2 - y1) = y3 + ub (y4 - y3)
Die Lösung bietet die folgenden Ausdrücke für ua und ub
Ersetzen entweder diese in die entsprechende Gleichung für die Linie gibt den Schnittpunkt. Zum Beispiel wird der Schnittpunkt (x,y) ist
x = x1 + ua (x2 - x1)
y = y1 + ua (y2 - y1)
Hinweise:
Die Nenner der Gleichungen für ua und ub sind die gleichen.
Wenn die Nenner der Gleichungen für ua und ub ist 0 dann sind die beiden geraden parallel sind.
Wenn die Zähler und Nenner der Gleichungen für ua und ub sind 0 dann sind die beiden Linien deckungsgleich.
Die Gleichungen gelten für Linien, wenn der Schnittpunkt von Liniensegmenten notwendig ist, dann ist es nur notwendig, um zu testen, ob ua und ub liegen zwischen 0 und 1. Je nachdem, was einem liegt innerhalb dieses Bereichs, so wird die entsprechende Zeile segment enthält den Schnittpunkt. Wenn beide liegen im Bereich von 0 bis 1 und der Schnittpunkt innerhalb der beiden Liniensegmente.
Gibt es eine tutorial auf das Thema (line segment intersection).
Vollständigkeit halber ich werde auch unterhalb der Algorithmus, wenn Linien dargestellt werden, in
(a,b,c)
Koordinaten so, dass die Gleichung für die Linie ista*x+b*y+c=0
.(a1,b1,c1)
und(a2,b2,c2)
schneiden einander in einem Punkt(x,y)
Finden Sie die homogenen Koordinaten des Punktes
Wenn geraden parallel sind, dann
w=0
.Sonst der Schnittpunkt befindet sich bei
Anhang
Definieren eine Linie
(a,b,c)
durch zwei Punkte(x1,y1)
und(x2,y2)
verwendenDefinieren eine Linie
(a,b,c)
durch einen Punkt(x,y)
mit polaren Richtung(cos(θ),sin(θ))