Objekte im Kreis anordnen: Warum geht's nicht?

  • Hallo!

    Ich habe vor mit einigen Freunden ein Spiel zu schreiben und in dem Spiel will ich, dass Objekte sich bewegen oder befinden. Und zwar im Kreis.

    Die Mathematik dahinter ist mir klar: Position(x=R*cos(a),y=R*sin(a)) Ich hab sogar nen Mathematiker gefragt :huh:

    Zur einfachen erleuterung sind überall kommentare; naja fast schon zu fiele :rolleyes:


    [autoit]

    #include <Array.au3> ;Einbinden von erweiterten Array Funktionen (z.B. _arraydisplay)
    $jo=CirclePos(200,4) ;Ruft die Funnktion CirclePos(Durchmesser=200, Bestandteile=4) auf.
    GUICreate("jo",200,200,0,0) ;Erstellt ein Fenster
    GUISetState(@sw_show) ;Macht das Fenster sichtbar
    $M=GUICtrlCreateButton("M",0-10+100,0-10+100,20,20) ;Erstellt den Mittelpunktsknopf
    GUICtrlSetColor($M,0xFFFFFF) ;Schriftfarbe von $M
    GUICtrlSetBkColor($M,0x000000) ;Hintergrundfarbe von $M
    GUICtrlCreateButton("1",$jo[0][0]-10+100,$jo[0][1]-10+100,20,20) ;müsste 100 | 0 sein
    GUICtrlCreateButton("2",$jo[1][0]-10+100,$jo[1][1]-10+100,20,20) ;müsste 0 | 100 sein
    GUICtrlCreateButton("3",$jo[2][0]-10+100,$jo[2][1]-10+100,20,20) ;müsste -100 | 0 sein
    GUICtrlCreateButton("4",$jo[3][0]-10+100,$jo[3][1]-10+100,20,20) ;müsste 0 | -100 sein
    _arraydisplay($jo) ;Zeigt das Array in einem Fenster mit werten an
    Func CirclePos($Durchmesser,$Anzahl) ;Funktion Deklarieren
    Dim $return[$Anzahl][2] ;Erstellt ein 2-Dimensionales Array
    $grad=360/$Anzahl ;Die Gradzahl errechnen
    $Radius=$Durchmesser/2 ;Radius berechnen
    For $i=0 To $Anzahl-1 ;Fortschrittsvariable erhöhen pro Durchlauf
    $return[$i][1]=sin($i*$grad) * $Radius ;vertikale Position in das Array eintragen ;IRGENDWO IST HIER EIN FEHLER
    $return[$i][0]=cos($i*$grad) * $Radius ;horizontale Position in das Array eintragen ;IRGENDWO IST HIER EIN FEHLER
    Next ;Schleifenbegrenzung
    Return $return ;Gibt das 2-Dimensionale Array zurück
    EndFunc ;Funktionsende

    [/autoit]

    Bitte um hilfe, dringend!

    PS: Für das spiel brauchen wir ggf. noch leute, die sowohl 2D, als auch 3D objekte (.X format; bitmaps) gut erstellen kann.

  • Ich glaub das ist einer der häufigsten Fehler überhaupt, die ich in der Mathematik kenne:D
    Sin(), Cos() und Tan() müssen im Bogenmaß angegeben werden, also z.B. dann so:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3> ;Einbinden von erweiterten Array Funktionen (z.B. _arraydisplay)

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

    $jo=CirclePos(200,4) ;Ruft die Funnktion CirclePos(Durchmesser=200, Bestandteile=4) auf.
    GUICreate("jo",200,200,0,0) ;Erstellt ein Fenster
    GUISetState(@sw_show) ;Macht das Fenster sichtbar
    $M=GUICtrlCreateButton("M",0-10+100,0-10+100,20,20) ;Erstellt den Mittelpunktsknopf
    GUICtrlSetColor($M,0xFFFFFF) ;Schriftfarbe von $M
    GUICtrlSetBkColor($M,0x000000) ;Hintergrundfarbe von $M
    GUICtrlCreateButton("1",$jo[0][0]-10+100,$jo[0][1]-10+100,20,20) ;müsste 100 | 0 sein
    GUICtrlCreateButton("2",$jo[1][0]-10+100,$jo[1][1]-10+100,20,20) ;müsste 0 | 100 sein
    GUICtrlCreateButton("3",$jo[2][0]-10+100,$jo[2][1]-10+100,20,20) ;müsste -100 | 0 sein
    GUICtrlCreateButton("4",$jo[3][0]-10+100,$jo[3][1]-10+100,20,20) ;müsste 0 | -100 sein
    _arraydisplay($jo) ;Zeigt das Array in einem Fenster mit werten an

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

    Func CirclePos($Durchmesser,$Anzahl) ;Funktion Deklarieren
    $pi = 3.14159265358979
    Dim $return[$Anzahl][2] ;Erstellt ein 2-Dimensionales Array
    $grad=360/$Anzahl ;Die Gradzahl errechnen
    $Radius=$Durchmesser/2 ;Radius berechnen
    For $i=0 To $Anzahl-1 ;Fortschrittsvariable erhöhen pro Durchlauf
    $return[$i][1]=sin(($pi/180)*$i*$grad) * $Radius ;vertikale Position in das Array eintragen ;IRGENDWO IST HIER EIN FEHLER
    $return[$i][0]=cos(($pi/180)*$i*$grad) * $Radius ;horizontale Position in das Array eintragen ;IRGENDWO IST HIER EIN FEHLER
    Next ;Schleifenbegrenzung
    Return $return ;Gibt das 2-Dimensionale Array zurück
    EndFunc ;Funktionsende

    [/autoit]
  • Ja, dafür kann der Mathelehrer wirklich nix, aber ich weiß noch, dass ich oft genug vergessen hab den Taschenrechner umzustellen und dann irgendein Müll raußbekommen hab.