Punkt auf der Verlängerung einer Strecke

  • hallo
    ich habe die 2 endpunkte einer strecke und möchte gerne einen punkt auf der verlängerung der geraden in einem bestimmten abstand herausfinden
    eigentlich sollte das ja kein problem sein aber irgendwie steh ich grad bisschen auf nem schlauch, weil ich nicht drauf komm wie ich das allgemein so mache, dass es egal ist ob die werte positiv oder negativ usw. sind.
    hier mal ein bild und die gedanken die ich mir dazu gemacht habe:
    [Blockierte Grafik: http://img17.imageshack.us/img17/5519/unbenannt0.jpg
    gegeben sind A(x1, y1), B(x2, y2) und d2

    [autoit]


    Func extension($length)
    $AX = GetAX()
    $AY = GetAY()
    $BX = GetBX()
    $BY = GetBY()

    [/autoit][autoit][/autoit][autoit]

    $diffx = $AX - $BX
    $diffy = $AY - $BY

    [/autoit][autoit][/autoit][autoit]

    $distance = Sqrt($diffx^2+$diffy^2)
    $angle = ACos($diffy/$distance)

    [/autoit][autoit][/autoit][autoit]

    $newdiffx = Sin($angle)*$length
    $newdiffy = Cos($angle)*$length

    [/autoit][autoit][/autoit][autoit]

    $newx = $BX+$newdiffx
    $newy = $BY+$newdiffy

    [/autoit][autoit][/autoit][autoit]

    Return ($newx & ", " & $newy)
    EndFunc

    [/autoit]

    funktioniert aber nicht so wie es soll. ich glaub ich komm da ein bisschen durcheinander, weil $AX, $AY, $BX und $BY sowohl negative, als auch positive werte annehmen können.
    ich freue mich auf hilfe

    mfg
    qwertz

    2 Mal editiert, zuletzt von qwertz (18. August 2009 um 01:13)

  • malen bringt mir in dem fall leider garnichts ^^
    aber danke schonmal, bin auf weitere antworten gespannt

  • Hi,

    ich habe die 2 endpunkte einer geraden


    Das ist schonmal ein Widerspruch in sich, eine Gerade ist nicht endlich :).

    Im Prinzip ist das ganz einfach. Beide Dreiecke sind Kongruent zueinander.

    Also, ich hab in das Bild noch Streckennamen eingefügt:
    [Blockierte Grafik: http://img10.imageshack.us/img10/5519/unbenannt0.jpg]
    Die Strecken des ersten Dreiecks kannst du ganz einfach ausrechnen.

    c1 ist die Strecke auf der x-Achse, logischerweise die Differenz zwischen den beiden X-Koordinaten:
    c1 = x2-x1

    h1 ist die Strecke auf der y-Achse, logischerweise die Differenz zwischen den beiden Y-Koordinaten:
    h1 = y2-y1

    Die Strecke d2 verhält sich zur Strecke d1 genauso wie die Strecke c2 zu c1 und h2 zu h1. Das sind die Kongruenzsätze, Also:
    d2/d1 = h2/h1 und genauso
    d2/d1 = c2/c1

    jetzt umstellen:

    h2 = d2/d1 * h1
    c2 = d2/d1 * c1

    x3 und y3 bekommst du wenn du jetzt zum Punkt x2 und y2 den Wert c2 und h2 addierst.

    x3 = x2 + c2
    y3 = y2 + h2

    Das wars. AutoIt Beispiel kommt wenn ich grad noch Zeit hab...

    /Edit: Zum 4. mal :D

    [autoit]

    Func extension($length)
    $AX = GetAX()
    $AY = GetAY()
    $BX = GetBX()
    $BY = GetBY()

    [/autoit][autoit][/autoit][autoit]

    $c1 = $BX - $AX
    $h1 = $BY - $AY
    $d1 = Sqrt(($c1 ^ 2) + ($h1 ^ 2))

    [/autoit][autoit][/autoit][autoit]

    $c2 = $length / $d1 * $c1
    $h2 = $length / $d1 * $h1

    [/autoit][autoit][/autoit][autoit]

    Return ($BX + $c2 & ", " & $BY + $h2)
    EndFunc ;==>extension

    [/autoit]

    Wenns nicht geht tut es mir leid, ich kanns nicht testen :).
    Natürlich noch optimierbar, theoretisch kann man alles in eine Zeile schreiben, wenn man die Zwischen variablen weglässt.

    anno2008

    4 Mal editiert, zuletzt von anno2008 (18. August 2009 um 01:00)