Verschiedene Kreisbögen durch 2 Punkte.

  • hi
    das szenario ist folgendes:
    gegeben sind 2 punkte A(x1|y1) und B(x2|y2).
    durch diese 2 punkte möchte ich verschiedene kreisbögen legen und XX verschiedene punkte in gleichem abstand auf diesem kreisbogen bestimmen.
    der radius der kreise muss mindestens so groß sein wie die strecke zwischen A und B und soll zufällig generiert werden.

    dieses bild bschreibt mein problem:

    [Blockierte Grafik: http://img17.imageshack.us/img17/4374/unbenannt2opk.jpg
    im moment hab ich noch keine ahnung, wie ich die sache überhaupt angehen soll.
    über hilfe freue ich mich :)

    mfg
    qwertz

  • Die Kreisbögen sind ja Teile von Kreisen - Die Mittelpunkte dieser Kreise liegen auf einer Linie (nennen wir sie mal L). Diese geht durch den Mittelpunkt zwischen A und B.
    Die Steigung dieser Linie L ist orthogonal (senkrecht) zur Verbindungslinie zwischen A und B.
    Du brauchst also eine Funktion zur Bestimmung der Linie L;

    Dann brauchst du noch eine Funktion,die den Abstand zwischen 2 Punkten bestimmt (Pythagoras).

    Nun müsstest du noch bestimmen welche Bereiche der Linie L gültig sind für deine Bedingung, dass der Abstand zwischen deinen Punkten kleiner ist als der zwischen den Mittelpunkt deiner Kreis(bögen) und A (bzw B).

    Da du das zufällig machen willst wähle einfach einen Punkt aus der Linie L aus, prüfe ob der Abstand zwischen deinen Punkten AB kleiner ist als der zwischen Mittelpunkt und A - und wenn das erfüllt lege den Kreisbogen durch die Punkte.

    Einmal editiert, zuletzt von Unicom (20. August 2009 um 23:25)

  • auf dem papier is das ganze ja kein problem aber ich steh grad im autoit aufm schlauch

    bin grad bei der funktionsgleichung der mittelsenkrechte angelangt

    [autoit]

    Func Kreisbogen($BX, $BY, $numberofpoints=3)
    $AX = GetX()
    $AY = GetY()

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

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

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

    ;mittelpunkt
    $MX = Round($playerx + $diffx/2)
    $MY = Round($playery + $diffy/2)

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

    ;steigung
    $ms = Round($diffy/$diffx, 3) ;strecke
    $mg = Round((-1)/$ms, 3) ;senkrechte

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

    ;punkt auf mittelsenkrechten
    $addx = $mg*1000
    $addy = 1000
    $PX = $MX + $addx
    $PY = $MY + $addy

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

    EndFunc

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

    Func Funktionsgleichung($x1, $y1, $x2, $y2, $x)
    $m = ($y2-$y1)/($x2-$x1)
    $b = $y2-$m*$x2
    $y = $m*$x+$b
    EndFunc

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

    Func Distance($X1, $Y1, $X2, $Y2)
    Return Round(Sqrt(($X1 - $X2)^2+($Y1 - $Y2)^2))
    EndFunc

    [/autoit]

    über nen tipp zur weiteren vorgehensweise würde ich mich freuen

    mfg
    qwertz