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:
- 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.
- Zeichne mit Hilfe dieser Methode eine Rosette aus 36 13-Ecken.
- 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:
- Turtle zum Mittelpunkt bringen.
- Turtle zu einem Eckpunkt bringen.
- Ersten Drehwinkel für die erste Ecke berechnen.
- Standard-Drehwinkel für die anderen Ecken berechnen.
- Tipp: Math.sin(double x) und Math.PI können benutzt werden.
Achtung: beim Sinus ist x im Bogenmaß anzugeben.
- Noch ein Tipp: 360/n ergibt ein anderes Ergebnis als 360.0/n
- Die Länge einer Seite muss in Abhängigkeit vom Radius und
der Eckenanzahl bestimmt werden.
- Zeichne mit Hilfe dieser Methode ein regelmäßiges 13-Eck.
- Zeichne mit Hilfe dieser Methode eine 13-eckige "Pyramide" (siehe Applet).
- Formuliere eine Methode
kreis(double mx, double my, double radius)
mit Hilfe der erstellten Methode nEck durch Überlegen
und Probieren.
- 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