image image


image

Fraktale überall: Pythagorasbäume mit TigerJython

Ich bin noch nicht fertig und Ihr seid noch nicht durch. Denn neben meinen Versuchen, ob es möglich sei, Daniel Shiffmans »The Nature of Code« nach TigerJython zu portieren, habe ich noch weitere Experimente mit dieser Python-Umgebung durchgeführt. Ich wollte wissen, wie groß der Anpassungsaufwand für Skripte ist, die ich schon einmal mit (C)Pythons Turtle-Modul programmiert hatte, in TigerJythons Turtle zu implementieren.

Dafür habe ich mir einfach die Skripte vorgenommen, mit denen ich vor rund einem Monat einen symmetrischen und einen asymmetrischen Pythagorasbaum in Python implementiert hatte und sie in TigerJythons IDE kopiert. Als erstes hatte ich mir den symmetrischen Pythagorasbaum vorgeknöpft:

# Symmetrischer Pythagoras-Baum

from gturtle import *
import math

WIDTH = 640
HEIGHT = 480

palette = [makeColor(189, 183, 110), makeColor(0, 100, 0), makeColor(34, 139, 105),
           makeColor(152, 251, 152), makeColor(85, 107, 47), makeColor(139, 69, 19),
           makeColor(154, 205, 50), makeColor(107, 142, 35), makeColor(139, 134, 78),
           makeColor(139, 115, 85)]

def tree(s):
    if s < 2:
        return
    quadrat(s)
    p.forward(s)
    s1 = s/math.sqrt(2)
    p.left(45)
    tree(s1)
    p.right(90)
    p.forward(s1)
    tree(s1)
    p.back(s1)
    p.left(45)
    p.back(s)

def quadrat(s):
    col = palette[int(s - 2)%len(palette)]
    p.setPenColor(col)
    p.setFillColor(col)
    p.startPath()
    for _ in range(4):
        p.forward(s)
        p.right(90)
    p.fillPath()

Options.setPlaygroundSize(WIDTH, HEIGHT)
wn = TurtleFrame()
wn.setTitle("Symmetrischer Pythagoras-Baum")
wn.clear(makeColor(43, 62, 80)) # Hintergrundfarbe
p = Turtle(wn)
p.hideTurtle()

p.penUp()
p.setPos(-50, -HEIGHT/2 + 50)
p.penDown()
tree(100)

print("I did it, Babe!")

Wenn Ihr dies mit dem Quelltext von vor einem Monat vergleicht, seht Ihr, daß tatsächlich nur minimale Änderungen notwendig waren. Der größte Unterschied ist, daß in (C)Pythons Turtle-Modul der Füllpfad mit turtle.begin_fill() und turtle.end_fill() geklammert wird, während es in TigerJython turtle.startPath() und turtle.fillPath() heißt. Ansonsten gibt es in paar kleinere Unterschiede bei einigen Befehlen und TigerJython bevorzugt – entgegen der PEP 8 – bei den Variablen- und Funktions-/Methodenamen CamelCase anstelle der Trennung mit dem Unterstrich. Das ist Jythons Java-Herkunft zu verdanken und ist auch bei Processing.py, das ja ebenfalls eine Jython-Implementierung ist, der Fall.

image

Dadurch ermutigt, wollte ich den asymmetrischen Pythagorasbaum bunter gestalten. Daher habe ich hier die Farbpalette eingesetzt, die ich auch schon bei dem »Random Walk«-Skript hier verwendet hatte:

palette = [makeColor(200, 23, 223), makeColor(18, 184, 116), makeColor(95, 145, 40),
           makeColor(8, 124, 127)]

Ansonsten unterscheidet nur die Funktion tree() das Skript von obigem Quellcode:

def tree(s, level):
    if level < 1:
        return
    else:
        quadrat(s)
        # Linke Seite
        ls = s*math.sqrt(3)/2
        p.forward(s)
        p.left(90)
        p.forward(s)
        p.right(150)
        p.forward(ls)
        p.left(90)
        tree(ls, level - 1)
        # Rechte Seite
        rs = s/2
        p.right(180)
        p.forward(rs)
        p.left(90)
        tree(rs, level - 1)
        p.left(60)
        p.back(s)

Da diese Funktion zwei Argumente erwartet, ergibt der Aufruf von tree(85, 14) obigen knallbunten und asymmetrischen Pythagorasbaum.

Glaubt bloß nicht, daß dies schon alles war, denn ich habe Blut geleckt und werde in den nächsten Tagen weiterhin mit TigerJython spielen. Zumindest so lange, bis mich das angekündigte, im März erscheinende Buch zu Processing.py wieder auf andere Gedanken bringt. 🤓


(Kommentieren) 

image image



Ü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!


Werbung


image  image  image
image  image  image


image