Gymnasium Löbau/Vertiefungsklasse 2010/Turtlegrafik (III)
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Java</language>
== Selbstähnlichkeiten ==
=== Der Binärbaum ===
Zunächst betrachten wir das nachfolgende Grafikobjekt, das wir als Binärbaum bezeichnen wollen.
Dabei fällt auf, dass jeder Ast wieder ein kleiner Binärbaum ist.<br />
Wir wollen diese ''Selbstähnlichkeit'' zu seiner Beschreibung ausnutzen:<br />
<table>
<tr>
<td width="380" align="center" valign="top">[[Bild:Binärbaum1.gif]]</td>
<td width="920" align="left" valign="top">
<blockquote>
'''Beschreibung:'''
* Der einfachste Binärbaum besteht aus einem Stamm.
* Jeder andere Binärbaum besteht aus einem Stamm sowie einem vereinfachten linken und einem vereinfachten rechten Binärbaum.
</blockquote>
</td>
</tr>
</table>
Wir stellen fest, dass es durchaus sinnvoll sein kann, Objekte mit sich selbst zu beschreiben.<br />
Mit der Turtlegrafik wollen wir eine gleichwertige Implementation vornehmen. Dazu definieren wir den Baum ''mit sich selbst''.<br />
<table>
<tr>
<td width="380" align="center" valign="top">
<canvas w="380" h="300"></canvas>
</td>
<td width="920" align="left" valign="top">
<code id="53762e8707c45">
public void baum(Object turtle, double x, int n) {
if (n > 0) {
turtle.forward(x);
turtle.left(45);
baum(turtle, 2 * x / 3, n - 1);
turtle.right(90);
baum(turtle, 2 * x / 3, n - 1);
turtle.left(45);
turtle.backward(x);
}
}
</code>
<run id="53763a1548d3b">
canvas1.clear();
turtle1.move(190, 280);
baum(turtle1, 100, 6);
</run>
</td>
</tr>
</table>
Prozeduren, die mit sich selbst definiert werden, heißen ''rekursive''<sup>1)</sup> ''Prozeduren''.<br />
Rekursionen stellen ein ''leistungsstarkes und universelles Konzept'' zur Problemlösung dar.<br />
<sup>1)</sup> recurrere (lat.): "zurücklaufen"
=== Die "Quadratschnecke" ===
'''Beschreibung:'''
* Die einfachste Quadratschnecke besteht aus einer Strecke.
* Jede andere Quadratschnecke besteht aus einer Strecke, einer Drehung um 90° sowie einer etwas verkürzten Quadratschnecke.
<table>
<tr>
<td width="380" align="center" valign="top">
<canvas w="380" h="300"></canvas>
</td>
<td width="920" align="left" valign="top">
<code id="537632102b602">
public void quadschnecke(Object turtle, double x) {
if (x > 0) {
turtle.forward(x);
turtle.right(90);
quadschnecke(turtle, x - 2);
}
}
</code>
<run id="537632102b6a9">
canvas2.clear();
turtle2.move(100, 250);
quadschnecke(turtle2, 200);
</run>
</td>
</tr>
</table>