commit 93af6201d7b444069d49b459096bc127ccb297bb Author: Rnhmjoj Date: Tue Dec 25 22:47:25 2012 +0100 Commit iniziale diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..496ee2c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store \ No newline at end of file diff --git a/Esempio.py b/Esempio.py new file mode 100644 index 0000000..2a81242 --- /dev/null +++ b/Esempio.py @@ -0,0 +1,11 @@ +import frattali + +impostazioni() + +fiocco = frattali.koch() +fiocco.disegna(n=3,l=6,p=1) + +controfiocco = frattali.koch("#000") +controfiocco.disegna(n=3,l=4,p=-1) + +turtle.mainloop() diff --git a/Frattali.py b/Frattali.py new file mode 100644 index 0000000..930fb36 --- /dev/null +++ b/Frattali.py @@ -0,0 +1,94 @@ +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() diff --git a/License.txt b/License.txt new file mode 100644 index 0000000..6596941 --- /dev/null +++ b/License.txt @@ -0,0 +1,10 @@ + * Frattali + * + * Modulo in python per disegnare frattali usando turtle graphics. + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * @author Michele Guerini Rocco aka Rnhmjoj + * @since 2012 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9c80a04 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +Frattali +======== + +Modulo in python 3 per disegnare frattali usando turtle graphics. +----------------------------------------------------------------- + +### Informazioni +Un semplice modulo per disegnare velocemente frattali tramite turtle graphics organizzato in classi. + +### Istruzioni +I tipi di frattali sono organizzati in classi. Per disegnarne uno istanziare un oggetto della classa che si vuole: + + figura = tipo(colore,velocità,riempi) + + *tipo: koch,sierpinski,hilbert; + *Colore: stringa con il nome del colore, tupla che contiene i numeri RGB del colore o #colore in RGB esadecimale; + *Velocità: un intero tra 0 e 10 o una stringa "fastest" = 0, "fast" = 10, "normal" = 6, "slow" = 3, "slowest" = 1; + *Riempi: True o False per riempire il frattale dopo averlo disegnato; + + Es. figura = koch("#92182b",0,True) + +Dopo aver creato l'oggetto per disegnare usare il metodo ".disegna()": + + figura.disegna(l,s,n,p) + + *l: numero di lati; + *s: misura del lato in pixel; + *n: numero di ricorsioni; + *p: parità della curva, 1 o -1; + + Es. figura.disegna(3,250,4,1) + +Tutti i parametri sono opzionali. +Le classi sono sottoclassi di "Turtle.Pen" quindi è possibile usare tutti i metodi ereditati da questa. +La documentazione di Turtle si può trovare qui: http://docs.python.org/3/library/turtle.html