2016-08-01 49 views
2

Die Entfernung zu einem Punkt von einer Linie zu finden, die durch zwei Punkte definiert wird, ist gut beantwortet, Shortest distance between a point and a line segment. Innerhalb dieser Antwort zeigt http://paulbourke.net/geometry/pointlineplane/ die Linie P1, P2 mit dem Punkt P3 tangential zur Linie, die zeigt, wie die Entfernung zu diesem Punkt bestimmt wird. Dies ist eine GPS-Anwendung, so dass die Überschrift der Linie bereits bestimmt ist und ich möchte keine Punktneigungsformel verwenden oder mit ihren Beschränkungen abfangen.Punkt in einer Linie basierend auf dem 3. Punkt tangential zu dieser Linie suchen

Ich möchte den Punkt zurück auf der Linie bestimmen, wo die Tangente diese Linie von P3 durch P1 P2 definiert schneidet. Vielen Dank im Voraus.

Edit:

ich eine Lösung, aber es ist ein bisschen umständlich, aber vielleicht auch nicht, es funktioniert sicher:

1) Calculate distance to point by 2 point line to P3 but don't take abs value 
2) If distance < 0 then side = 1 else side = -1 
3) dist = abs(distance) 
4) rad2 = heading + PI/2 * side //tangent is always 90 degrees to line 
5) sin rad2*dist + P3.x = point Q.x 
6) cos rad2*dist + P3.y = point Q.y 

scheint der Punkt ist, an

egal die Seite zu arbeiten sketch

+2

Können Sie eine Skizze hinzufügen. Ich habe Probleme, die Anfrage zu visualisieren. – ja72

+0

Das Bild zeigt eine Linie. Der Punkt P ist ebenfalls bekannt und ist wie oben P3. Ich möchte bestimmen, Q [1]: http://i.stack.imgur.com/bTFIg.gif – Briantee

+0

Ich bekomme Sie richtig - in Ihrem Fall sind P1, P2 und P3 bekannt, und Sie kennen auch die Tangente Vektor? –

Antwort

0

Wenn eine Linie durch die Gleichung A*x+B*y+C=0 bekannt ist und ein Punkt P ist o utside die Linie mit den Koordinaten (P_x,P_y) dann dem Punkt auf der Linie am nächsten P ist

x = (A^2*P_y-A*B*P_x-B*C)/(A^2+B^2) 
y = (B^2*P_x-A*B*P_y-A*C)/(A^2+B^2) 

Auch der minimale Abstand des Punktes P zu der Linie ist

d = ABS(A*P_x+B*P_y+C)/SQRT(A^2+B^2) 

Edit 1

Die Gleichung einer unendlichen Linie durch t vielleicht wo Punkte (x_1,y_1) und (x_2,y_2) ist

A*x+B*x+C=0 
(y_1-y_2)*x + (x_2-x_1)*y + (x_1*y_2-x_2*y_1) = 0 

bearbeiten 2

Wenn die Linie von Punkt gegeben (Q_x,Q_y) und Richtung (e_x,e_y) dann die Gleichung Koeffizienten

sind
A = -e_y 
B = e_x 
C = Q_x*e_y - Q_y*e_x 
+0

Aber die Linie ist nicht durch die Gleichung bekannt. Danke für deine Antwort, es ist sehr gut, wenn die Gleichung bekannt ist. Ich möchte nur P1 und P2 verwenden, die eine unendliche Linie definieren, wobei P3 irgendwo entlang dieser Linie sein kann. – Briantee

+0

Also, wie ist die Linie definiert? 1) Zwei Punkte, 2) Punkt und Richtung, 3) Gleichung, 4) anderes Konstrukt. – ja72

+0

1. Zwei Punkte von einem Punkt und einer Überschrift abgeleitet. Ich habe eine Lösung, aber es ist ein wenig umständlich: 1) Berechnen Sie Abstand zu Punkt von 2 Punkt Linie zu P3. 2) Wenn Abstand <0 dann Seite = 1 else Seite = -1 3) dist = abs (Abstand) 4) rad2 = Kurs + PI/2 * Seite 5) sin * rad2 * dist + P3.x = Punkt x 6) cos * rad2 * dist + P3.y = Punkt y – Briantee