Una variazione della curva C realizzata con la tecnica L-System.
Inizialmente assomiglia alla curva di Koch, ma più avanti si autointerseca e assomiglia sempre più alla chioma di un albero.
La grammatica
- variabile: F
- costanti: +, –
- assioma: F
- regola di produzione:
F → +F--F++F--F+
In pratica…
- Per ogni F: gira a sinistra, avanza, gira 2 volte a destra, avanza, gira 2 volte a sinistra, avanza, gira 2 volte a destra, avanza, gira a sinistra
- Angolo: 60°
- Passo: precalcolato…
Ecco gli sviluppi al variare del livello di produzione
Liv. | Stringa | Lung. | |
---|---|---|---|
1 | F | 1 | |
2 | +F--F++F-- F+ | 12 | |
3 | ++F--F++F- -F+--+F--F ++F--F++++ F--F++F--F +--+F--F++ F--F++ | 56 | |
4 | ... | 232 | |
5 | ... | 936 | |
6 | ... | 3752 | |
7 | ... | 15016 |
import math
import turtle
#-----------------------------------------------
WIDTH = 800 # Dimensione finestra
HEIGHT = 400 # ...
LIVELLI= 7 # Numero livelli
#-----------------------------------------------
W =-WIDTH*0.3 # Posizione iniziale
H =-HEIGHT*0.3 # ...
DIR = 0 # Direzione iniziale
ANGOLO = 60 # Angolo a sinistra
#----------------------- Passo della tartaruga
SIZE = WIDTH*0.6 / 2**(LIVELLI-1)
#-----------------------------------------------
R = 'F'
REGOLE = {'F':'+F--F++F--F+', '+':'+', '-':'-'}
#-----------------------------------------------
def trasforma(R):
R2=''
for x in R:
R2 += REGOLE[x]
return R2
#-----------------------------------------------
def prepara():
turtle.setup(width=WIDTH, height=HEIGHT)
turtle.title("Livello="+str(LIVELLI))
turtle.bgcolor('pink')
turtle.pencolor("red")
turtle.pensize(2)
turtle.penup()
turtle.shape('turtle')
turtle.speed(0)
turtle.setposition(W,H)
turtle.setheading(DIR)
turtle.pendown()
turtle.hideturtle()
turtle.tracer(0)
#-----------------------------------------------
def disegna(R):
for x in R:
if(x == '+'):
turtle.left(ANGOLO)
elif(x == '-'):
turtle.right(ANGOLO)
elif(x == 'F'):
turtle.forward(SIZE)
#-----------------------------------------------
for j in range(LIVELLI-1):
R=trasforma(R)
print(len(R), '\t', str().join(R), '\n')
prepara()
disegna(R)
turtle.update()