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,84

    Und dann d² minimieren.
    d²'=2,2312x1+9,104
    0=2,2312x1+9,104

    Wolfram 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/34
    x + 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.


Anmelden zum Antworten