Commit iniziale
This commit is contained in:
commit
93af6201d7
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.DS_Store
|
11
Esempio.py
Normal file
11
Esempio.py
Normal file
@ -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()
|
94
Frattali.py
Normal file
94
Frattali.py
Normal file
@ -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()
|
10
License.txt
Normal file
10
License.txt
Normal file
@ -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
|
35
README.md
Normal file
35
README.md
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user