Coordinate errechnen

  • Moin

    Also im Prinzip ganz einfach(oder auch nicht^^). Ich hab einen in einem Coordinatensystem eine Linie und davon den anfangs x und y wert und den end x und y wert. und möchte einen auf dieser Geraden liegenden Punkt herrausfinden.

    EDIT. Was hier noch bekannt ist ist die stecke von punkt 1(anfangspunkt) zu dem zu findenden punkt

    Hier noch ein Bild zur veranschaulichung

    [Blockierte Grafik: http://s3.directupload.net/images/100606/b2a2uoif.jpg]

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    Einmal editiert, zuletzt von Darter (6. Juni 2010 um 08:37)

  • Mir fallen da auf Anhieb mehrere Lösungsmöglichkeiten ein. Eine wäre z.B. der Strahlensatz oder die
    Geradengleichung y=mx+b
    Die Steigung m=(y0-y1)/(x0-x1) (sprich delta y / delta x) ausrechnen und mit x0 und y0 in die Geradengleichung einsetzen ergibt b.
    Liefert zu jedem x das passende y auf der Gerade.

  • omg. die schule ist schon lange her ich versteh grad nur bahnhof. können wir das mal an einem konkreten bsp. auflösen?

    also sagen wir x1 = 0, y1 = 0 und x2 = 50, y2 = 20

    m = (0-20) / (0-50)
    m = -20/-50
    m = -0,4 ??? EDit muss ja Positiv sein, da die steigung ins positive geht oder? also 0,4

    und wie gehts dann jetzt weiter ?

    und bei dem Punkt den ich berechnen will hab ich da keine Coordinate weder x noch y

    EDIT. Was hier noch bekannt ist ist die stecke von punkt 1(anfangspunkt) zu dem zu findenden punkt

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    2 Mal editiert, zuletzt von Darter (6. Juni 2010 um 08:37)

  • hehe^^
    wenn m=-0,4, dann ist m=-0,4 aber minus geteilt durch minus = plus daher war deine Rechnung ein bisschen falsch aber du hast GESEHEN, dass es falsch war, gibt ne 1 mit Sternchen^^
    Das ist schon ok so....

    einsetzen von x1=0 und y1=0 und m=0,4 in y=mx+b ergibt

    0=0,4 * 0 +b => b=0 war klar, da die gerade durch den Ursprung (0|0) geht

    also ist deine Gleichung y=0,4 * x + 0 zu jedem x bekommst du nun das passende y
    y=0,4 * x

    Punkt x=25
    y=0,4 * 25 = 10 x=25 => y=10


    Hausaufgabe:
    P1(17|22)
    P2(-13|12)
    an welchem Punkt schneidet die Gerade
    a) x=0
    b) y=0

    • Offizieller Beitrag

    Hier mal mit Funktion:

    [autoit]

    Local $x1 = 20, $y1 = 10, $x2 = 170, $y2 = 130

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

    ; === Steigung ermitteln:
    Local $m = ($y2 -$y1) / ($x2 -$x1) ; = 0,8

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

    ; === Prüfen ob Punkt auf Linie
    ; === x1, y1 und Anstieg sind nun bekannt
    ; === ein Punkt ist dann auf der Linie, wenn er dieselbe Steigung besitzt ausgehend von denselben Ausgangskoordinaten

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

    Local $testX = 40, $testY = 26
    MsgBox(0, '', $testX & ', ' & $testY & ' auf der Linie?' & @CRLF & _PointOnLine($x1, $y1, $x2, $y2, $testX, $testY))

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

    Func _PointOnLine($x1, $y1, $x2, $y2, $PointX, $PointY)
    Local $m = ($y2 -$y1) / ($x2 -$x1)
    Local $mP = ($PointY -$y1) / ($PointX -$x1)
    If $mP = $m Then
    Return True
    Else
    Return False
    EndIf
    EndFunc

    [/autoit]
  • ah klasse. Jetzt kommt solangsam wieder die errinerung an die schöne schülzeit ^^

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • hehe, bei mir auch schon 30 Jahre her^^...

    aber nochmal zu deiner Frage:
    du brauchst natürlich "irgendwelche" Informationen zu deinem gesuchten Punkt. Entweder direkt die Koordinate, oder ein Teilungsverhältnis oder irgend etwas anderes, daß man in die Gleichung reinbauen kann.

    Was du suchst ist eine Funktion $ypsilon=ypsilonvonx(x0,y0,x1,y1,x_koordinate_auf_der_gerade), aber das solltest du hinbekommen nun^^

  • so jetzt war ich denk ganzen Tag weg und habs jetzt nochmal Probiert. Also klar ist mir jetzt das ich erstmal die Steigung brauch und damit zu jedem x das passende y oder umgekehrt errechnen kann. Aber wie ist es jetzt wenn ich X und Y von einem Punkt auf der Gerade errechnen will.
    Also wissen tu ich immer noch deinen Anfangspunkt, ein Endpunkt und die Strecke von dem Anfangspunkt zu meinem zu bestimmenden Punkt.

    hier nochmal mein schönes Bild ^^


    http://www.directupload.net

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Also zeichnen könnte man das mit einem Zirkel wunderbar.
    Gehen wir davon aus wir haben Endpunkt - Anfangspunkt --> daraus folgt wir haben die Steigung
    Per Steigung können wir jetzt den Punkt heraus finden, also, ist der Punkt schon da?

    Angenommen wir haben Koordinaten System:

    X = 50
    Y = 100

    Punkt 1 X= 0
    Punkt 1 Y=0

    Punkt 2 X = 20
    Punkt 2 Y = 30

    --> 1 X = 0,66666666666666666666666666666667
    --> 1 Y = 1

    --> 1 X * 30 = 20
    --> 1 Y * 30 = 30

    --> Wir haben die Steigung die da heisst: Wenn X um 0,66666666666666666666666666666667 steigt, so steigt Y um 1.

    Mit hilfe der Steigung kann man jetzt den Punkt heraus bekommen, indem man bis zu dem Punkt einen schnitt macht, und X + Y so lange erhöht, bis man den Punkt raus hat !

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • naja klar zeichnerisch könnte man das schnell lösen aber wie ich geschrieben hab soll das ganze rechnerisch gelöst werden. Von diesem zu errechnenden Punkt habe ich weder x noch y. Was ich alerding habe ist die strecke vom anfangspunkt zu dem zu findenden Punkt. mit der Steigung komme ich ja nur insofren weiter, wenn ich eine Coordinate(x oder y) des zu findenen Punktes habe.

    Um es nochmal klar zu stellen. DIe Strecke von dem Anfangspunkt bis zu dem zu findenen Punkt auf der Gerade ist mir bekannt

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    Einmal editiert, zuletzt von Darter (6. Juni 2010 um 23:04)

  • Wenn du Anfangs und Endpunkt einer Geraden hast und noch die Strecke eines neuen Punktes auf der Geraden vom Anfangspunkt aus gesehen brauchst du keine Steigung extra ausrechnen.
    Das ist nur ne einfache Verhältnisgleichung.
    Die Koordinaten vom Anfangspunkt aus gesehen verhalten sich wie die Strecke des neuen Punktes zur Strecke zwischen Anfangs und Endpunkt.
    In Code gegossen z.B. so:

    Spoiler anzeigen
    [autoit]

    #include "Array.au3"

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

    $a = Kleinpunkt(0, 0, 3,4, 2)
    _ArrayDisplay($a)

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

    Func Kleinpunkt($Xa, $Ya, $Xb, $Yb, $s)
    Local Const $iGes = sqrt(($Xb-$Xa)^2+($Yb-$Ya)^2)
    Local Const $aRet[2] = [$Xa+(($Xb-$Xa)/$iGes)*$s, $Ya+(($Yb-$Ya)/$iGes)*$s]
    Return $aRet
    EndFunc

    [/autoit]

    Btw: Warum schreibst du Koordinate mit "C"?

    Einmal editiert, zuletzt von AspirinJunkie (6. Juni 2010 um 23:24)

  • Oder das ganze mit Vekktoren machen.
    Anfangspunkt A
    Zweiter Punkt B
    Gesuchter Punkt P
    Ortsvektoren: OA, OB, OP,
    OP = OA + AP
    AP = x * AB = x * (OA-OB)
    OP = OA + x*(OA-OB)
    |AP| = die bekannte Länge der Strecke
    --> |x * (OA-OB)| = die Streckenlänge ...
    Das ist aber komplizierter als Verhältnisgleichungen direkt aufzustellen. (Im Endeffekt werden auch hier die Längen zweier Vektoren verglichen.)

    Edit: Die resultierende Funktion wäre das:

    Spoiler anzeigen
    [autoit]

    Func _Punkt($length, $x1, $y1, $x2, $y2)
    Local $s = $length / sqrt( ($x2-$x1)^2 + ($y2-$y1)^2)
    Local $p[2] = [$x1 + $s* ($x2-$x1), $y1 + $s * ($y2-$y1)]
    Return $p
    EndFunc

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

    #include "Array.au3"
    $a = _punkt(2, 0, 0, 3,4)
    _ArrayDisplay($a)

    [/autoit]

    2 Mal editiert, zuletzt von progandy (7. Juni 2010 um 14:37)

  • Das ist aber komplizierter als Verhältnisgleichungen direkt aufzustellen.


    Das ist nicht komplizierter - es ist das selbe... ;)
    Da Ortsvektoren nichts weiter als Koordinaten sind ist die Rechnung vom Prinzip nichts anderes als das was ich gepostet habe - nur halt nochmal anders hingeschrieben ($length / sqrt( ($x2-$x1)^2 + ($y2-$y1)^2) = $s / $iGes).
    Allerdings sparst du dir eine Division da du sie gleich in dein $s berechnest anstatt 2x in den Koordinaten - das ist besser.
    Ob man das nun Vektorrechnung oder Verhältnisrechnung nennt ist dann allerdings nur Geschmackssache.

  • Hmm, Wenn man die Verhältnisgleichung direkt aufstellt kann man die ganzen Vektoren weglassen. Ich meine, dass das ein anderer Ansatz ist, auch wenn die gleichen Gleichungen rauskommen.

  • Durchaus das wir am Anfang was vermeintlich anderes gedacht haben.
    Du hattest Punkte und Linien mit Pfeilen im Kopf - ich Punkte und Koordinatendifferenzen.
    Allerdings kam gleich am Anfang das selbe raus.
    Du nennst es Ortsvektoren OA, OB - ich nenn es Koordinaten von A und B.
    Du nennst es Vektor AB - ich nenn es Koordinatendifferenz von A und B.
    Du nennst es Betrag von AP - ich nenn es Strecke s zwischen A und P.
    Gleiche Anfangsparameter hatten wir schonmal - da verwundert es nicht das der Weg dann auch der selbe ist.
    Ja wir haben wohl beide 2 verschiedene Ansätze gehabt welche allerdings die selben sind.
    Viele Wege führen nach Rom - besonders wenn es der selbe Weg ist. :)

    Ich will auch nicht auf sowas unwichtigem drauf rumreiten oder so - du hast Recht so wie du es gemacht hast und die Implementierung ist durch die gesparte Division auch besser als meine.