Albero binario – 90°

Con una rotazione di 90° si ottiene un’antenna

import time   # sleep()
import turtle

def set_all():
    global POSIZIONE, DISTANZA, DISTANZE, RIC_MAX, FATTORE
    
    WIDTH    = 800 # larghezza finestra
    HEIGHT   = 800 # altezza finestra
    RIC_MAX  = 12  # massima ricorsione
 
    POSIZIONE = HEIGHT*0.4           # posizione iniziale
    DISTANZA  = HEIGHT*0.33          # dimensione iniziale della curva
    DISTANZE  = [0]*(RIC_MAX+1)      # dimensioni successive
    FATTORE   = 0.7                  # Fattore moltiplicativo   
 
    turtle.setup(width=WIDTH, height=HEIGHT)
    turtle.hideturtle()
    turtle.pencolor("red")
    turtle.bgcolor("pink")
    turtle.pensize(1)
    turtle.tracer(0)

def start_draw(r):
    DISTANZE[r] = DISTANZA
    for i in range(r-1,0,-1):
        DISTANZE[i]=DISTANZE[i+1]*FATTORE

    turtle.penup()
    turtle.setposition(0,-DISTANZA)
    turtle.setheading(90)
    turtle.pendown()

def end_draw(r):
    turtle.update()
    turtle.title("Ricorsione = " + str(r))
    time.sleep(1)

def albero(n):
    if(n > 0):
        d=DISTANZE[n]
        turtle.pensize(n)
        turtle.forward(d)
        turtle.left(90)
        albero(n-1)
        turtle.right(180)
        albero(n-1)
        turtle.left(90)
        turtle.backward(d)

set_all()
for r in range(1,RIC_MAX+1):
    start_draw(r)
    albero(r)
    end_draw(r)

turtle.done()

Osserva

  • Il codice genera gli alberi uno dopo l’altro, con ricorsione da 1 a 12
  • Per aumentare la velocità, i rami di un albero appaiono tutti contemporaneamente
  • Il nuovo albero ricopre il vecchio, con spessore crescente.

Lascia un commento