from math import sin, cos, pi from random import randrange def svg_linie_als_string(x1, y1, x2, y2, farbe, dicke): return f'' class zeichenfenster(): def __init__(self, breite, hoehe): self.breite = breite self.hoehe = hoehe self.liste_strecken = [] def strecke(self, x1, y1, x2, y2, farbe, dicke=1): self.liste_strecken.append((x1, y1, x2, y2, farbe, dicke)) def speichere_als_svg(self, name): with open(name, 'w') as datei: datei.write(f'\n') datei.write(f'\n') for s in self.liste_strecken: datei.write(svg_linie_als_string(*s)+'\n') datei.write('\n') ############################################## # Diverse Funktionen zur Steuerung der Kröte # ############################################## def vorwaerts(distanz): vx = distanz*cos(kroete["alpha"]*pi/180) vy = distanz*sin(kroete["alpha"]*pi/180) if kroete["stiftunten"]: fenster.strecke(kroete["x"], kroete["y"], kroete["x"]+vx, kroete["y"]+vy, kroete["farbe"], kroete["dicke"]) kroete["x"] += vx kroete["y"] += vy def rueckwaerts(distanz): vorwaerts(-distanz) def links(winkel): kroete["alpha"] -= winkel def rechts(winkel): links(-winkel) def stifthoch(): kroete["stiftunten"] = False def stiftrunter(): kroete["stiftunten"] = True def setze_farbe(farbe): kroete["farbe"] = farbe def setze_dicke(dicke): kroete["dicke"] = dicke def baum(tiefe, laenge): setze_farbe((randrange(256), randrange(256), randrange(256))) vorwaerts(laenge) if tiefe > 0: links(30) baum(tiefe-1, laenge/2) rechts(60) baum(tiefe-1, laenge/2) links(30) stifthoch() rueckwaerts(laenge) stiftrunter() ############################# # Beginn des Hauptprogramms # ############################# fenster = zeichenfenster(5000, 5000) ######################################################### # Zustandsdaten der Kröte in einem Dictionary speichern # ######################################################### # 1. Möglichkeit: kroete = { "x" : 2500, "y" : 5000, "alpha" : -90, "farbe" : (255, 0, 0), "dicke" : 1, "stiftunten" : True, } # 2. Möglichkeit: # kroete = {} # kroete["x"] = 2500 # kroete["y"] = 5000 # kroete["alpha"] = -90 # kroete["farbe"] = (255, 0, 0) # kroete["dicke"] = 1 # kroete["stiftunten"] = True setze_dicke(10) baum(9, 2000) fenster.speichere_als_svg("output.svg")