import turtle,math def impostazioni(): turtle.title("Frattali") turtle.bgcolor("#000") turtle.hideturtle() class frattale(turtle.Pen): def __init__(self, colore = "yellow", velocità = 0, riempi = True): super(frattale,self).__init__() self.colore = colore self.riempi = riempi self.velocità = velocità self.speed(self.velocità) self.color(self.colore) self.hideturtle() def posizione(self, x, y): self.pu() self.setpos(x, y) self.pd() class koch(frattale): def disegna(self, l=3, s=250, n=4, p=1): spigolo = 2 * s * math.sin(math.pi / l) self.posizione(s,0) if self.riempi == True: self.begin_fill() self.rt(180 - (90 * (l - 2) / l)) for i in range(l): self.curva(spigolo, n, p) self.rt(360 / l) self.lt(180 - (90 * (l - 2) / l)) if self.riempi == True: self.end_fill() self.posizione(0,0) def curva(self, s, n, p): if n < 1: self.fd(s) return self.curva(s / 3, n - 1, p) self.lt(60 * p) self.curva(s / 3, n - 1, p) self.rt(120 * p) self.curva(s / 3, n - 1, p) self.lt(60 * p) self.curva(s / 3, n - 1, p) class hilbert(frattale): def disegna(self, s = 4, n = 6, p = 1): self.posizione(-33*s*p,-33*s*p) if self.riempi == True: self.begin_fill() self.curva(s, n, p) if self.riempi == True: self.end_fill() self.posizione(0,0) def curva(self, s, n, p): if n == 0: return self.lt(p * 90) self.curva(s, n - 1, -p) self.fd(s) self.rt(p * 90) self.curva(s, n - 1, p) self.fd(s) self.curva(s, n - 1, p) self.rt(p * 90) self.fd(s) self.curva(s, n - 1, -p) self.lt(p * 90) class sierpinski(frattale): def disegna(self, n, s = 400, x = -200, y = -150): self.posizione(x, y) if n==1: if self.riempi == True: self.begin_fill() for i in range(3): self.fd(s) self.lt(120) if self.riempi == True: self.end_fill() else: sierpinski.disegna(self, n-1, s/2, x, y) sierpinski.disegna(self, n-1, s/2, x+s/2, y) sierpinski.disegna(self, n-1, s/2, x+s/4, y+(s*((3)**0.5))/4) impostazioni() fiocco = koch() fiocco.disegna(n=3,l=6,p=1) controfiocco = koch("#000") controfiocco.disegna(n=3,l=4,p=-1) turtle.mainloop()