====== Koch'sche Schneeflocke ======
Die Kochsche Schneeflocke setzt sich aus drei identischen Teilen zusammen, die mithilfe einer rekursiven Methode gezeichnet werden können:
{{ .:ks.png |}}
Jede Seite der Schneeflocke besteht aus einer //[[https://de.wikipedia.org/wiki/Koch-Kurve|Kochkurve]]//.
{{ :faecher:informatik:oberstufe:algorithmen:rekursion:uebungen02:kochsche_schneeflocke:kochkurve.png |}}
Eine Kochkurve der Stufe n und Länge l kann mithilfe einer rekursiven Methode mit Turtle-Grafik
''zeichneKochkurve(int n, int l)'' mit Turtle-Grafik gezeichnet werden.
----
{{:aufgabe.png?nolink |}}
=== (A1) ===
* Verwende die Vorlage aus [[..:einfuehrung:start| der Einführung in die Turtle Grafik]]
* Notiere den Basisfall zum Zeichnen einer Kochkurve der Iteration 0 und Länge ''l'' in einer Methode ''zeichneKochkurve(int n, int l)'' im Quelltext.
* Zeichnen die Kochkurve in der 0. Iteration auf ein Blatt Papier. Zeichne anschließend mit anderer Farbe ein, wo sich die (um 1/3 verkleinerte) Kochkurve der Iteration 0 in der Kochkurve der Iteration 1 wiederfindet und mit einer weiteren Farbe, wo sich die (wieder um 1/3 verkleinerte) Kochkurve der Iteration 1 in der Iteration 2 wiederfindet.
* Wie oft muss die Methode ''zeichneKochkurve'' sich für jede Iteration selbst aufrufen?
* Wie verändern sich die Parameter der Selbstaufrufe.
* Welche Turtle-Befehle müssen jeweils zwischen den Selbstaufrufen ausgeführt werden?
* Vervollständige Quelltext und implementiere die Methode ''zeichneKochkurve(int n, int l)''.
* Implementiere die Methode ''zeichneKochflocke(int n, intl)''.
=== Hilfestellungen ===
++++ Hilfe 1: Basisfall |
public void zeichneKochkurve(int n, int l) {
if(n==0) {
// Zeichne Strich der Länge l
} else {
// Anderer Fall
}
}
++++
++++ Hilfe 1: Codegerüst |
public void zeichneKochkurve(int n, int l) {
if(n==0) {
t.forward(l);
} else {
// Was muss mit n und l geschehen, wenn man eine Stufe weiter hineinzoomt?
n=FIXME
l=FIXME
// Nun müssen drei "kleinere" Kochkurven gezeichnet werden
zeichneKochkurve(n, l);
// Was muss zwischendrin passieren?
FIXME
zeichneKochkurve(n, l);
FIXME
zeichneKochkurve(n, l);
FIXME
zeichneKochkurve(n, l);
}
++++
++++ Hilfe 3: Lösungsvorschlag |
public void zeichneKochkurve(int n, int l) {
if(n==0) {
t.forward(l);
} else {
n=n-1;
l=l/3;
zeichneKochkurve(n, l);
t.left(60);
zeichneKochkurve(n, l);
t.right(120);
zeichneKochkurve(n, l);
t.left(60);
zeichneKochkurve(n, l);
}
}
++++