Punkte auf einem Kreis ermitteln

  • Hey @ all,

    wie kann ich die Punkte P1 bis P8 auf meiner Skizze rechnerisch herausfinden? Gegeben ist der Mittelpunkt, der Radius und der (blau markierte) Winkel von 45°.

    mfG
    Developer30

    Dateien

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

    Einmal editiert, zuletzt von Developer30 (5. Februar 2011 um 01:49)

  • Mit Vektoren geht das z.B. so.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Global Const $Pi_Div_180 = ACos(-1) / 180

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

    $iLength = 10
    $iStartAngle = 0
    $iStepAngle = 45
    $iSteps = 8

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

    Global $aVector_Test[2] = [0, $iLength * -1], $aResults[$iSteps + 1][2] = [[$iSteps]]

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

    For $i = 1 To $aResults[0][0]
    $aVector_Result = _Vector_RotateOnZAxis($aVector_Test, $iStartAngle + ($i - 1) * $iStepAngle)
    $aResults[$i][0] = $aVector_Result[0]
    $aResults[$i][1] = $aVector_Result[1]
    Next

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

    _ArrayDisplay($aResults)

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

    Func _Vector_RotateOnZAxis($aVector_Rotate, $iDegree)
    Local $aVector_Return[2]

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

    $aVector_Return[0] = $aVector_Rotate[0] * _Cos($iDegree) - $aVector_Rotate[1] * _Sin($iDegree)
    $aVector_Return[1] = $aVector_Rotate[1] * _Cos($iDegree) + $aVector_Rotate[0] * _Sin($iDegree)

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

    Return $aVector_Return
    EndFunc ;==>_Vector_RotateOnZAxis

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

    Func _Cos($nValue)
    Return Cos($nValue * $Pi_Div_180)
    EndFunc ;==>_Cos

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

    Func _Sin($nValue)
    Return Sin($nValue * $Pi_Div_180)
    EndFunc ;==>_Sin

    [/autoit]
  • name22 thx für dein Beispiel ;D
    hab eine Lösung für mein Problem gefunden...

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • Also für einfache Dreiecksbeziehungen umständlich Vektorrotationen durchzuführen ist schon ziemlich mit Kanonen auf Spatzen geschossen.
    Simpler:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Global Const $PI = ACos(-1)

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

    ;Kreisdaten:
    Global $M[2] = [5, 4] ; Mittelpunkt
    Global $R = 2 ; Radius

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

    Global $aPunkte[8][2] ; Array für Kreispunkte
    Global $fWinkel = $PI/4 ; 45° in Radiant

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

    For $i = 0 To 7
    $aPunkte[$i][0] = $M[0] + $R * Sin($i * $fWinkel)
    $aPunkte[$i][1] = $M[1] + $R * Cos($i * $fWinkel)
    Next

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

    _ArrayDisplay($aPunkte)

    [/autoit]
  • jo perfekt :thumbup: das is mal ne kurz & knackige Lösung :)

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."