Donnerstagaufgabe

Ich erwarte eine Ausarbeitung der Methoden mit "Bleistift und Papier". Kopieren einer Musterlösung über das Austauschverzeichnis gilt nicht! Wenn man nicht alle Aufgaben löst, ist dies kein Problem, denn hier stehen mehr Aufgaben, als man normalerweise in zwei Stunden schaffen kann. Es muss aber für mich nachvollziehbar sein, dass man sich mit den Aufgaben beschäftigt hat und an welchen Stellen Probleme auftraten.

Aufgaben:
  1. Formuliere eine Methode einfneck(double seite, int n), die ein regelmäßiges n-Eck (alle Seitenlängen und Innenwinkel sind gleich groß und alle Eckpunkte liegen auf einem Kreis) nach einer einfachen Art und Weise zeichnet, nälich mit Start an einem Eckpunkt.
  2. Zeichne mit Hilfe dieser Methode eine Rosette aus 36 13-Ecken.
  3. Formuliere eine Methode nEck(double mx, double my, double radius, int n), die ein regelmäßiges n-Eck (alle Seitenlängen und Innenwinkel sind gleich groß und alle Eckpunkte liegen auf einem Kreis mit Radius radius) um den Mittelpunkt mit den Mittelpunktskoordinaten mx und my zeichnet. n ist die Anzahl der Eckpunkte.) Dazu sind einige mathematische Überlegungen nötig:
    1. Turtle zum Mittelpunkt bringen.
    2. Turtle zu einem Eckpunkt bringen.
    3. Ersten Drehwinkel für die erste Ecke berechnen.
    4. Standard-Drehwinkel für die anderen Ecken berechnen.
    5. Tipp: Math.sin(double x) und Math.PI können benutzt werden. Achtung: beim Sinus ist x im Bogenmaß anzugeben.
    6. Noch ein Tipp: 360/n ergibt ein anderes Ergebnis als 360.0/n
    7. Die Länge einer Seite muss in Abhängigkeit vom Radius und der Eckenanzahl bestimmt werden.
  4. Zeichne mit Hilfe dieser Methode ein regelmäßiges 13-Eck.
  5. Zeichne mit Hilfe dieser Methode eine 13-eckige "Pyramide" (siehe Applet).
  6. Formuliere eine Methode kreis(double mx, double my, double radius) mit Hilfe der erstellten Methode nEck durch Überlegen und Probieren.
  7. Zeichne eine Rosette bestehend aus Kreisen. Die Benutzung der vorher erstellten Methode ist hier allerdings schwierig.

Beispiel-Applet ausführen
Lösung zu den Aufgaben:
import java.awt.*;
import java.applet.*;

public class Neckrosetten extends Applet
{
  Turtle t;
  public void paint(Graphics g)
  {
    t = new Turtle(this,150, 150, 0);
    zeichne();
  }

  void zeichne()
  {
    neck(150, 150, 100, 13);
    pyramide();
    kreis(600, 150, 100);
    t.stiftHoch();
    t.geheZu(700, 400);
    t.stiftRunter();
    rosette();
  } // zeichne

  void pyramide()
  {
    for (int i=1; i<=20; i++)
    {
      neck(400, 1+20*i, 10*(i-1), 13);
    }
  } // pyramide

  void rosette()
  {
    for (int i=1; i<=36; i++)
    {
      einfneck(20, 13);
      t.drehe(10);
    }
  } // rosette

  void einfneck(double seite, int n)
  {
    double drehwinkel;
    drehwinkel=360.0/n;
    for (int i=1; i<=n; i++)
    {
      t.vor(seite);
      t.drehe(-drehwinkel);
    }
  }  // einfneck

  void neck(double mx, double my, double radius, int n)
  {
    double drehwinkel;
    double seite;
    drehwinkel=360.0/n;
    seite=2.0*radius*Math.sin(Math.PI/n);
    t.stiftHoch();
    t.geheZu(mx, my);
    t.setzeRichtung(90);
    t.vor(radius);
    t.drehe(-90-drehwinkel/2.0);
    t.stiftRunter();
    for (int i=1; i<=n; i++)
    {
      t.vor(seite);
      t.drehe(-drehwinkel);
    }
  }  // neck

  void kreis(double mx, double my, double radius)
  {
    neck(mx, my, radius, 50);
  }  // kreis

} // class Neckrosetten
Zur Übersicht