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.
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.
(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% Um eine Zeile (a,b,c)
über zwei Punkte (x1,y1)
und (x2,y2)
zu definieren, verwenden Sie
Um eine Linie (a,b,c)
durch einen Punkt (x,y)
mit der Polarrichtung (cos(θ),sin(θ))