An diesem Wochenende habe ich mich ein wenig als virtueller Förster betätigt und mithilfe von Pythons Turtle fraktale Bäume auf dem Monitor wachsen lassen. Dabei hatte ich als Vorlage ein Programm aus dem hier schon mehrfach erwähnten Buch »The Recursive Book of Recursion« des hier ebenfalls schon mehrfach erwähnten Al Sweigart vorgeknöpft und es meinen Vorstellungen einer mehr objektorientierten Behandlung der Schildkröte angepaßt und die Bäume ein wenig mit Farbe aufgehübscht.
Hier der Quellcode, er ist ausreichend kommentiert und dürfte daher selbsterklärend sein (natürlich findet Ihr ihn auch in meinem GitHub-Repositorium):
# Fraktaler Baum (mit der Turtle gezeichnet)
# Nach Al Sweigart »The Recursive Book of Recursion«, Seite 187ff
# Modifiziert von -ka-
import random, time
import turtle as t
WIDTH = 650
HEIGHT = 550
# Initialisierung der Turtle
wn = t.Screen()
wn.colormode(255)
wn.bgcolor(235, 215, 182) # Packpapier
wn.setup(width = WIDTH, height = HEIGHT, startx = 1400, starty = 50)
wn.setworldcoordinates(0, 0, WIDTH, HEIGHT)
wn.title("Fraktaler Baum nach Al Sweigart")
wn.tracer(0)
alice = t.Turtle()
alice.speed(0) # Höchstgeschwindigkeit
alice.hideturtle()
def draw_branch(start_position, direction, branch_length):
if branch_length < 3:
# base case
return()
# Startposition und initiale Richtung
alice.penup()
alice.goto(start_position)
alice.setheading(direction)
# Zeichne einen Zweig
alice.pendown()
# Zweigdicke ist 1/7 der Zweiglänge
alice.pensize(max(branch_length/7.0, 1))
if alice.pensize() >= 9.5:
alice.pencolor(139, 69, 19)
elif alice.pensize() >= 8.5:
alice.pencolor(139, 115, 85)
elif alice.pensize() >= 7.0:
alice.pencolor(139, 134, 78)
elif alice.pensize() >= 5.5:
alice.pencolor(189, 183, 110)
elif alice.pensize() >= 4.0:
alice.pencolor(85, 107, 47)
elif alice.pensize() >= 2.5:
alice.pencolor(107, 142, 35)
else:
alice.pencolor(0, 100, 0)
alice.forward(branch_length)
# Speichere die Position am Ende des Zweigs
end_position = alice.position()
left_direction = direction + random.randint(10, 30)
left_branch_length = branch_length - random.randint(8, 15)
right_direction = direction - random.randint(10, 30)
right_branch_length = branch_length - random.randint(8, 15)
# Rekursion
draw_branch(end_position, left_direction, left_branch_length)
draw_branch(end_position, right_direction, right_branch_length)
# Hauptprogramm
iteration = 0
while True:
# (Pseudo-) Zufallswert für die Startlänge des Stamms
start_length = random.randint(85, 100)
# Ausgabe der Seed-Nummer
alice.clear()
alice.penup()
alice.goto(10, 10)
alice.pencolor(45, 45, 45)
alice.write("Iteration No.: %s" % (iteration))
# Zeichne den Baum
draw_branch((WIDTH//2, 10), 90, start_length)
wn.update()
time.sleep(2)
iteration += 1
Daas Programm läuft in einer Endlosschleife und zeichnet alle zwei Sekunden einen neuen Baum. Es kann nur brutal mit CTRL-C
oder dem Stop-Button im Editor beendet werden.
Für die Neugierigen unter meinen Leserinnen und Lesern: Ich habe für den Screenshot meinem Editor Thonny einen Dark Mode verpaßt. Er heißt Desert Sunset und er ist der erste Dark Mode, der mir wirklich gefällt. Nicht nur, daß er dank seines starken Kontrastes auch im Sonnenlicht auf unserer Terrasse noch lesbar ist, sondern er funktioniert in Thonny auch zusammen mit Py5. Warum auch nicht, Quelltext ist Quelltext, egal in welchem Mode.
Ich habe außerdem bei der Lektüre von Al Sweigarts Buch Blut geleckt und große Lust bekommen, nicht nur Pythons Turtle, sondern auch die Schildkröte in TigerJython (die kann mehr bunt und auch Videos) mal wieder zu bemühen. Wundert Euch also nicht, wenn entsprechende Skripte auf diesen Seiten auftauchen sollten. 🤓
Über …
Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter Rentner, Autor, Netzaktivist und Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!
Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.
Der Besuch dieser Webseite wird aktuell von der Piwik Webanalyse erfaßt. Hier können Sie der Erfassung widersprechen.
Diese Seite verwendet keine Cookies. Warum auch? Was allerdings die iframes
von Amazon, YouTube und Co. machen, entzieht sich meiner Kenntnis.
Werbung
Diese Spalte wurde absichtlich leergelassen!