Wie berechnen Sie angesichts der 4 Punkte, die 2 Liniensegmente beschreiben, ob Linie A in Richtung Linie B oder von Linie B weg verläuft?
Die 2 Linien haben eine feste Länge und können als Abstand von x1 / y1 bis x2 / y2 gemessen werden.
Wie berechnen Sie angesichts der 4 Punkte, die 2 Liniensegmente beschreiben, ob Linie A in Richtung Linie B oder von Linie B weg verläuft?
Die 2 Linien haben eine feste Länge und können als Abstand von x1 / y1 bis x2 / y2 gemessen werden.
Antworten:
Sei A
und B
sei zwei Punkte auf der schwarzen Linie. Lass C
und D
sei dein blaues Segment. Das Vorzeichen der z
Koordinate des Kreuzprodukts AB^AC
gibt an, ob C
"links" oder "rechts" von der schwarzen Linie ist. In ähnlicher Weise gibt Cross Product an AB^CD
, ob CD
"links" oder "rechts" von der schwarzen Linie gesteuert wird.
Wir wollen nicht wirklich wissen, ob es links oder rechts ist; Wir wollen nur sicherstellen, dass sie die gleiche oder die entgegengesetzte Richtung haben. Deshalb multiplizieren wir die beiden Werte.
Der folgende Pseudocode sollte daher funktionieren:
z1 = (xB-xA)*(yC-yA) - (yB-yA)*(xC-xA);
z2 = (xB-xA)*(yD-yC) - (yB-yA)*(xD-xC);
z3 = z1 * z2;
if (z3 < 0)
; /* Pointing towards (BUT maybe even crossing) */
else if (z3 > 0 || z2 != 0)
; /* Pointing away */
else
; /* Parallel */
Ich fürchte, ich brauche etwas Zeit, um eine richtige Lösung für die Bezier-Kurve zu schreiben. Ist die folgende Situation in Richtung oder weg?
Angenommen, Startpunkt ist der grüne Kreis und Endpunkt ist der rote Pfeil
Berechnen Sie den Abstand zwischen dem Startpunkt als DS und dem schwarzen Segment und machen Sie dasselbe für den Endpunkt (roter Pfeil) wie DE. Wenn DS> DE, zeigt das Segment in Richtung. Wenn DE> DS, zeigt es weg. Wenn beide gleich sind, sind die beiden Parallelen.
Sie können feststellen , wie die Entfernung von einem Punkt zu einem Segment berechnen hier , und eine quadratischen Bezier - Kurve hier . Abhängig von der Form der Bezierkurve kann es jedoch zu seltsamen Ergebnissen kommen (die Kurve kann sich selbst kreuzen).