XNA Liniensegment Schnittpunkt?

8

Sagen wir, wir haben 4 Vector2 's (ja das ist 2d), also haben wir lineOneStart, lineOneEnd, lineTwoStart und lineTwoEnd.

Wie kann ich erkennen, ob sich die 2 Linien kreuzen? Es ist mir egal, wo sie sich kreuzen, ich will nur wissen, ob sie sich kreuzen.

    
Peter 17.02.2010, 22:05
quelle

3 Antworten

6

Sehen Sie sich diese Formel von Bourke .

Ich musste dieses Problem kürzlich ebenfalls lösen. Eine weitere Option ist mit (immer) die Gleichung der Linie ( y = mx + c ), aber es gibt einige Grenzfälle müssen Sie mit betroffen sein, als auch tatsächlich zu überprüfen, ob der Schnittpunkt innerhalb des Liniensegments ist. Die Formel in dem obigen Link funktioniert, obwohl ich nicht wirklich auf kommentieren, wie die Gleichung angeordnet ist ist alles, was ich sagen werde, ist es funktioniert;)

Bearbeiten :

Wie AndiDog erwähnt, eine andere Seite, die ich verwendet (das Beispiel ist auch ausgezeichnet) ist diese Anleitung . Da dies XNA ist, wird der zweite Link direkt auf deiner Straße sein.

Bearbeiten (Inhalt von defekten Link) :

Die Gleichungen der Zeilen sind Pa = P1 + ua ( P2 - P1 ) und Pb = P3 + ub ( P4 - P3 )

Lösen für den Punkt, wo Pa = Pb die folgenden zwei Gleichungen in zwei Unbekannten gibt (ua und ub) %Code% und %Code% Solving gibt die folgenden Ausdrücke für ua und ub

Das Ersetzen dieser beiden Elemente in der entsprechenden Gleichung für die Linie ergibt den Schnittpunkt. Zum Beispiel ist der Schnittpunkt (x, y) %Code% x1 + ua (x2 - x1) = x3 + ub (x4 - x3)

Hinweise: Die Nenner für die Gleichungen für ua und ub sind gleich. Wenn der Nenner für die Gleichungen für ua und ub 0 ist, sind die zwei Linien parallel. Wenn der Nenner und der Zähler für die Gleichungen für ua und ub 0 sind, stimmen die zwei Linien überein. Die Gleichungen beziehen sich auf Linien, wenn der Schnittpunkt der Liniensegmente erforderlich ist, dann ist es nur notwendig, zu testen, ob ua und ub liegen zwischen 0 und 1. Je nachdem, was einen in diesem Bereich liegt, dann wird das entsprechende Liniensegment den Schnittpunkt enthält. Wenn beide im Bereich von 0 bis 1 liegen, liegt der Schnittpunkt innerhalb beider Liniensegmente.

    
Finglas 17.02.2010, 22:09
quelle
3

Zu diesem Thema gibt es ein Tutorial (Liniensegment-Schnittpunkt).

    
AndiDog 17.02.2010 22:12
quelle
0

Der Vollständigkeit halber werde ich unten den Algorithmus einschließen, wenn Linien in (a,b,c) Koordinaten dargestellt werden, so dass die Gleichung für die Linie a*x+b*y+c=0 ist.

  • Zwei Linien mit den Koordinaten (a1,b1,c1) und (a2,b2,c2) schneiden sich in einem Punkt (x,y)
  • Finde die homogenen Koordinaten des Punktes als

    %Vor%
  • Wenn Zeilen parallel sind, dann w=0 .

  • Ansonsten liegt der Schnittpunkt bei

    %Vor%

Anhang

  • Um eine Zeile (a,b,c) über zwei Punkte (x1,y1) und (x2,y2) zu definieren, verwenden Sie

    %Vor%
  • Um eine Linie (a,b,c) durch einen Punkt (x,y) mit der Polarrichtung (cos(θ),sin(θ))

    zu definieren %Vor%
ja72 12.08.2014 13:35
quelle

Tags und Links