Schildkrötengrafik

Nach Jahren habe ich das Buch Mindstorms von Seymour Papert wieder entdeckt (Papert, 1980, 1982)1. Er entfaltet darin seine Sicht des Computers als geistiges Werkzeug und wie Kinder sich dieses Werkzeug mit Hilfe von Logo erschließen können. Als zentrale Komponente von Logo wurde ab 1970 die Schildkrötengrafik (Turtle graphics)2 eingeführt, durch die mit einfachen Grundbefehlen ansprechende und komplexe Grafiken erzeugt werden können. „Die Schildkrötengeometrie ist ein anderer Stil der Geometrie. Euklids Stil ist ein logischer, Descartes‘ Stil ist ein algebraischer. Schildkrötengeometrie ist ein algorithmisierter Stil der Geometrie.“ (Papert, 1982, S. 84)

Papert beschreibt den zugrunde liegenden Ansatz der Schildkrötengeometrie im Kapitel 3 seines Buches: Schildkrötengeometrie: Eine Mathematik, die fürs Lernen gemacht ist. Einige seiner Grundprinzipien möchte ich deshalb hier erneut nennen und mit interaktiven Beispielen illustrieren. Zum Verständnis ist es empfehlenswert, sich den Code der Beispiele anzusehen3.

Die Schildkröte kann Befehle in der sogenannten Schildkrötensprache verstehen. Die Bewegungen der Schildkröte werden im folgenden Beispiel duch solche Befehle beschrieben:

Mit den Befehlen [v] vorwärts und [z] zurück bewegt sich die Schildkröte in einer geraden Linie in ihrer Blickrichtung, d.h. sie verändert ihre Position, aber nicht ihre Blickrichtung. Mit den Befehlen [r] rechts und [l] links verändert sie ihre Blickrichtung, aber nicht ihre Position. Im Beispielprogramm können Sie durch Drücken der entsprechenden Tasten die Schildkröte steuern. Drücken Sie [a] wird ein Schreibstift abgesenkt und sie hinterlässt eine Spur. Mit [h] kann der Stift wieder angehoben werden.

Die Schildkrötensprache kann durch eigene Prozeduren erweitert werden. Das bekannteste Beispiel dafür ist in Logo sicherlich das Quadrat. In der Prozedur werden die Befehle zum Zeichnen der vier gleichlangen Seiten und das jeweilige Drehen der Schildkröte um 90 Grad zusammen gefasst.

Mit dem Schieberegler [length] kann die Seitenlänge der Quadrate verändert werden, mit [n_squares] können mehrere geschachtelte Quadrate gezeichnet werden. [delta] bestimmt den Längenunterschied der Seiten benachbarter Quadrate. Die Quadrate können so variabel gezeichnet werden, weil die Seitenlänge als Eingabeparameter übergeben wird.

Das Verallgemeinern von Programmen bzw. Prozeduren ist der Schritt vom Vertrauten zum Unbekannten. So können statt der Quadrate beliebige Vielecke mit gleichlangen Seiten und gleichen Winkeln gezeichnet werden.

Beim Zeichnen eines Kreises lässt Papert die Kinder Schildkröte spielen. Er spricht von körper-syntonischem Lernen. Von der Körperbewegung „mache kleinen Schritt nach vorne, drehe dich ein wenig“ ist es nur noch ein kleiner Schritt zum Programm. Die wiederhole-Schleife zeigt das erwartete Ergebnis.

Mit dem Schieberegler [angle] kann der Drehwinkel festgelegt werden, mit [steps] die Anzahl der Schritte. Mit [n_circles] können mehrere gegeneinander verdrehte Kreise gezeichnet werden.

Die Verallgemeinerung vom Quadrat zum Kreis zeigt Paperts Vollständige-Schildkrötenreisesatz: „Wenn die Schildkröte eine Reise um die Grenzen einer Fläche macht und in demselben Zustand aufhört, in dem sie angefangen hat, dann ist die Summe aller Drehungen 360 Grad.“

Das kann nochmal gezeigt werden beim Zeichnen von Rosetten aus Polygonen. Das Muster wird erhalten durch das Zeichnen einzelner Polygone und Winkeländerung zwischen den Polygonen.

Mit dem Schieberegler [n_sides] wird die Zahl der Seiten der Polygone festgelegt, mit [side] kann ihre Seitenlänge verändert werden. [n_polygons] bestimmt die Anzahl der Polygone. Mit [angle] kann der Drehwinkel zwischen den Polygonen festgelegt werden.

Die Beispiele haben gleichzeitig gezeigt, wie Probleme durch das Aufteilen in Teilprobleme gelöst werden können. Besondes spannend sind die Auswirkungen bei periodischen Wiederholungen oder Rekursion.

Der Code zeigt, dass die Seitenlänge bei jedem Aufruf des Zeichnens einer Spirale die Seite kontinuierlich verändert wird. Das geht mit der Übergabe der Seitenlänge an die zeichnende Prozedur als Variable. Papert nennt Variablen auch Kommunikationsmittel zwischen Prozeduren. Hier kann mit dem Schieberegler [side] die anfängliche Seitenlänge festgelegt weren. Mit [angle] kann der Drehwinkel zwischen den Spiralseiten und mit [delta] die Veränderung des Drehwinkels festgelegt werden.

In Kapitel 5 stellt Papert das Konzept der Mikrowelt als „Brutkasten für Wissen“ vor. Er überträgt dafür den Grundgedanken, dass die Schildkröte(ngrafik) den Zugang zu formalen Konzepten erleichtert, auf physikalische Phänomene. Er stellt u.a. Geschwindigkeits– und Beschleunigungsschildkröten vor. Mein Beispiel stammt aus der Biologie und verwendet gekoppelte Schildkröten.

Es ist ein einfaches Modell, in dem eine Fledermaus ein Insekt jagd. Die Fledermaus erkennt die Position des Insekts und bewegt sich in seine Richtung. Für beide Individuen kann die Geschwindigkeit und die Fähigkeit des „Hakenschlagens“ festgelegt werden. Das ist entscheidend dafür, ob und wie schnell die Fledermaus das Insekt fangen kann.

Wenn das Programm mit der grünen Flagge gestartet wird, können zunächst die Geschwindigkeit mit [steps_bat] bzw. [steps_insect] und die Beweglichkeit mit [turn_bat] bzw. [turn_insect] festgelegt werden. Wenn Sie die Werte für einen Simulationslauf übernehmen wollen, drücken Sie die Leertaste und die Jagd wird gestartet. Sie ist dann beendet, wenn die Fledermaus das Insekt gefangen hat. Das kann beliebig oft wiederholt werden.

Die vorgestellten und weitere Beispiele typischer Schildkrötengrafiken habe ich als Logo Classics auf der Snap!-Community-Seite zusammengestellt. Alle Beispiele sind interaktiv und der Code ist dort einseh- und veränderbar.

Dieser kurze Rückblick auf die Anfänge der Schildkrötengrafik wäre unvollständig ohne den Hinweis auf einen weiteren Klassiker: Harold Abelson & Andrea diSessa: Turtle Geometry4. Sie machen an spannenden Beispielen (geschlossene Kurven, Turtle als „Tier“, 3D-Turtle usw.) den Unterschied deutlich zwischen der Turtle-Geometrie, die auf den intrinsischen Eigenschaften geometrischer Figuren basiert, und der Koordinaten-Geometrie, deren extrinsische Sicht sich durch mathematische Gleichungen auszeichnet. Die Beispiele sind programmtechnisch nicht immer direkt übernehmbar, weil sie nicht in einer konkreten Logo-Version, sondern allgemeiner mit einem Pseudo-Code vorgestellt werden. Die Übertragung in Snap! sollte dennoch meist gelingen.

Anmerkungen:
1 Die Lektüre lohnt sich auch und gerade heute noch, wenn überlegt wird, ab wann und in welcher Form Informatikunterricht in der Schule eingeführt wird. Die englische Originalfassung des Buchs kann kostenlos herunter geladen werden: http://worrydream.com/refs/Papert%20-%20Mindstorms%201st%20ed.pdf
2 In deutschsprachigen Logo-Einführungen (z.B. Abelson, 1983; Hoppe & Löthe, 1984 oder Ziegenbalg, 1985) und in den deutschen Versionen der Programmiersprache Logo (aktuell in MSWLogo) wird statt Schildkröte häufig der Ausdruck Igel (wegen der Kürze des Wortes) verwendet.
3 Die Beispiele sind mit Snap! umgesetzt. Durch Schieberegler können die Kennwerte der jeweiligen Grafik interaktiv verändert werden. Der Code ist durch Anwahl des Beispiels (Anklicken des Auge rechts oben) direkt zugänglich.
4 Erfreulicherweise ist das Buch immer noch erhältlich als Taschenbuch erhältlich. Absolute Kaufempfehlung!
Zitierte Literatur:
Abelson, H. (1983). Einführung in Logo. München: IWT-Verlag.
Abelson, H. & diSessa, A. (1980). Turtle Geometry: The Computer as a Medium for Exploring Mathematics. Cambridge, Mass. & London: The MIT Press.
Hoppe H.-U. & Löthe, H. (1984). Problemlösen und Programmieren mit Logo. Ausgewählte Beispiele aus Mathematik und Informatik. Stuttgart: Teubner.
Papert, S. (1980). Mindstorms: Children, Computer, and Powerful Ideas. New York: Basic Books
Papert, S. (1982). Mindstorms: Kinder, Computer und Neues Lernen. Stuttgart: Birkhäuser
Ziegenbalg, J. (1985). Programmieren lernen mit Logo. München: Hanser.