Den kürzesten Abstand zw. Punkt und Gerade bestimmen
-
Hallo,
ein kleines mathematisches Problem:
Wie kann ich denn am einfachsten den kürzesten Abstand von einer Gerade zu einem Punkt bestimmen?Gegeben sind z.B.
f(x) = 0.34x + 49.8
und P(10;7)Wenn ich die Gleichung in Vektorform gegeben hätte, dann wär's relativ einfach (g(x) = v1*x + v2):
1. sv = Skalarprodukt von Vektor vP und v1 bilden
2. sv in g(x) einsetzen und somit einen neuen Vektor ( = den Punkt Q) auf der Gerade bestimmen
3. mithilfe des Pytagoras den Abstand zw. Q und P bestimmen.
Das Problem ist aber, dass ich keine Vektoren sondern gain und offset habe.
Wie kann ich sonst den Abstand bestimmen? Danke im Voraus.Rew.
-
[Rewind] schrieb:
Gegeben sind z.B.
f(x) = 0.34x + 49.8
und P(10;7)Wenn Du schon den Pythagoras nimmst,
y1 = 0.34x1 + 49.8
y2 = 7
x2= 10
d²=(y1-y2)² + (x1-x2)²
d²=(0.34x1 + 42.8)² + (x1 - 10)²
d²=(0,1156x1²+29,104x1+1831,84+x1²-20x1+100
d²=1,1156x1²+9,104x1+1931,84Und dann d² minimieren.
d²'=2,2312x1+9,104
0=2,2312x1+9,104Wolfram Alpha fragen
http://www.wolframalpha.com/input/?i=0%3D2.2312*x1%2B9.104
x1≈-4.08032(Nicht auf kleinere Rechenfehler geachtet.)
Aber was, was wie Vektorrechnung aussieht, würde ich doch bevorzugen.
Z.B. m1*m2=-1 == (m1 ist senkrecht zu m2)f(x) = 34/100x + 49.8
g(x) = -100/34x + b //g ist senkrecht zu f
und P(10;7)
7 = -100/34*10 + b
b ausrechnen.
f und g schneiden
-
Ok, erstmal brauchst Du einen Vektor, der in die gleiche Richtung wie die Gerade zeigt und am Besten auf 1 normiert ist. In Deinem Beispiel
f(x) = 0.34x + 49.8 und P(10;7)
wäre das v1 = (v1_x,v1_y) = (0.34,1)/sqrt(0.34^2 + 1^2).
Dann brauchst Du einen Vektor, der senkrecht darauf steht und auf jeden Fall auf 1 normiert ist. Das wäre v2 = (v1_y,-v1_x).
Jetzt ziehst Du mal den Offset von Deinem Punkt ab...
P'=(10;7-49.8)
Und dann löst Du das Gleichungssystem
a*v1+b*v2=P'
Der Betrag von b ist dann der gesuchte Abstand.
-
Danke euch beiden. Ich werde schauen, welche Methode sich am einfachsten in meinem Programm umsetzen lässt. Weitere Ansätze sind natürlich auch erwünscht.
@Gregor: wo hast du die 1 in "(0.34,1)/sqrt(0.34^2 + 1^2)" her?
-
[Rewind] schrieb:
Wenn ich die Gleichung in Vektorform gegeben hätte, dann wär's relativ einfach (g(x) = v1*x + v2):
Gegeben sind z.B.
f(x) = 0.34x + 49.8
und P(10;7)Ok, von f(x) kenne ich einen Punkt, nämlich v2=(0,f(0))=(0,49.8) und die Richtung v1=(1,0.34) (eins nach rechts heißt 0.34 hoch).
Und Vektorrechnung machen.
(Daher wohl auch Gregors 1).
-
[Rewind] schrieb:
Danke euch beiden. Ich werde schauen, welche Methode sich am einfachsten in meinem Programm umsetzen lässt. Weitere Ansätze sind natürlich auch erwünscht.
@Gregor: wo hast du die 1 in "(0.34,1)/sqrt(0.34^2 + 1^2)" her?
Oh, sorry, ist natürlich (1,0.34)/sqrt(0.34^2 + 1^2)
Ich habe einfach den Offset weggenommen und dann geguckt, welchen Wert die Gerade an Stelle x=1 hat. ...das ist dann mein Vektor und danach teile ich nochmal durch die Länge des Vektors. Wobei ich letzteres eigentlich erst für den Vektor benötigen würde, der senkrecht darauf steht.