lehrkraefte:blc:informatik:glf25:turtle:lsystems

This is an old revision of the document!


L-Systems

Ziel ist es, die Turtle-Sprache noch weiter zu kondensieren und eine «eigene Programmiersprache» zu definieren. Dazu muss natürlich ein Programm geschrieben werden, das «unsere Sprache» ausführen kann.

Beispiel: Ein Quadrat kann wie folgt beschrieben werden: F+F+F+F, wobei F für forward (zeichnen) und + für left (drehen). Der Drehwinkel muss dabei auf 90° festgelegt werden.

  • F: Linie in aktueller Richtung zeichnen (wie forward bei der Turtle). Die Länge wird als konstant angenommen.
  • + und -: Drehung in positiver oder negativer Richtung. Der Drehwinkel wird als konstant angenommen.

Wir verwenden die Turtle-Library. Code an der Tafel.

Wir definieren Regeln, womit Grossbuchstaben in unserem Code mit anderem Code ersetzt werden.

Beispiel: F ersetzen durch F+F--F+F.

Das kann natürlich nicht unendlich oft geschehen. Es wird also ein zusätzlicher Parameter tiefe übergeben, der festelegt, wie oft die Ersetzung stattfinden soll.

Code an der Tafel.

Wir führen folgende Zeichen ein:

  • ( Position und Richtung merken (künftig evtl. auch weitere Dinge wie Schrittlänge/Winkeländerung/Farbe etc.)
  • ) Zuletzt gemerkte Posittion und Richtung wieder herstellen.

Code-Erweiterung an der Tafel.

Beispiel: zeichne("F", {"F":"F(+F+F)F(--F+F)F"}, 2) liefert dann

Es können weitere Befehle definiert werden, wie z.B. b (für Blatt), der die Farbe auf grün und Dicke der Linie auf 4 ändert, wenn die tiefe 0 beträgt. Diese Parameter müssen dann zusätzlich gespeichert und wieder hergestellt werden:

if c=="b" and tiefe==0:
  pencolor("green")
  pensize(4)

und

states.append({'position':position(), 'heading':heading(), 'pencolor':pencolor(), 'pensize':pensize()})

und

penup()
state = states.pop()
setposition(state['position'])
setheading(state['heading'])
pencolor(state['pencolor'])
pensize(state['pensize'])
pendown()

from random import random
 
nulleins = random()  # Zufällige «reelle» Zahl im Intervall [0,1)

Damit kann z.B. zum Drehwinkel jeweils ein zufälliger Winkel addiert werden, bzw. vor dem Zeichnen noch zufällig etwas gedreht werden. Auch kann die Länge der Striche variiert werden.

Man faltet einen Papierstreifen immer wieder hälftig. Dann öffnet man diesen so, dass alle Falze 90° sind.

zeichne("A",{"A":"A+B", "B":"A-B"},13)

Wir führen dazu die neue Regel ein, dass alle Grossbuchstaben gezeichnet werden (wie F):

if c>="A" and c<="Z":     # anstatt c=="F":

Hier werden die Buchstaben A und B nicht gezeichnet…

zeichne("A", {"A":"+BF-AFA-FB+", "B":"-AF+BFB+FA-"},2)

  • lehrkraefte/blc/informatik/glf25/turtle/lsystems.1767952700.txt.gz
  • Last modified: 2026/01/09 09:58
  • by Ivo Blöchliger