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') ########################################################################################################## # Bündelung der Turtle-Daten und zugehörigen Methoden in einer Klasse (objektorientiertes Programmieren) # ########################################################################################################## class Schildkroete(): def __init__(self, x=0, y=0, alpha=0, farbe=(255, 0, 0), dicke=1, stiftunten=True): self.x = x self.y = y self.alpha = -alpha self.farbe = farbe self.dicke = dicke self.stiftunten = stiftunten def vorwaerts(self, distanz): vx = distanz*cos(self.alpha*pi/180) vy = distanz*sin(self.alpha*pi/180) if self.stiftunten: fenster.strecke(self.x, self.y, self.x+vx, self.y+vy, self.farbe, self.dicke) self.x += vx self.y += vy def rueckwaerts(self, distanz): self.vorwaerts(-distanz) def links(self, winkel): self.alpha -= winkel def rechts(self, winkel): self.links(-winkel) def stifthoch(self): self.stiftunten = False def stiftrunter(self): self.stiftunten = True def setze_farbe(self, farbe): self.farbe = farbe def setze_dicke(self, dicke): self.dicke = dicke def baum(self, tiefe, laenge): self.setze_farbe((randrange(256), randrange(256), randrange(256))) self.vorwaerts(laenge) if tiefe > 0: self.links(30) self.baum(tiefe-1, laenge/2) self.rechts(60) self.baum(tiefe-1, laenge/2) self.links(30) self.stifthoch() self.rueckwaerts(laenge) self.stiftrunter() fenster = zeichenfenster(5000, 5000) kroete = Schildkroete(2500, 5000, 90) kroete.setze_dicke(10) kroete.baum(9, 2000) fenster.speichere_als_svg("output.svg")