martedì 24 novembre 2009

La ricorsione - 2° post


Finalmente eccoci qua  per il secondo articolo sulla Ricorsione. Avevamo promesso di occuparci di grafica e partiamo subito con un linguaggio di programmazione estremamente semplice e particolarmente indicato per applicazioni grafiche: il linguaggio LOGO nel caso specifico useremo la versione educational di Micromondi.

Il LOGO per la sua semplicità viene utilizzato da molti educatori come strumento per avvicinare i bambini alla programmazione.

L’idea illuminante è quella di poter controllare in modo efficace attraverso pochi comandi il cammino di un oggetto sullo schermo. L’oggetto in questione è la famosa Tartaruga sicuramente nota a molti.





La tartaruga possiede uno stato rappresentato da:
  • dalle coordinate della sua posizione sul piano cartesiano
  • da un angolo che indica il suo orientamento rispetto all’asse x
  • dalla condizione pennaSU/pennaGIU in base alla quale traccia una linea in seguito ad un suo spostamento.
I comandi, seguiti da un parametro,  a cui risponde e che  modificano il suo stato sono: 
  • Avanti   s              (s  numero di pixel)
  • Indietro s
  • Destra   t              (t  gradi della rotazione)
  • Sinistra  t


I comandi per attivare/disattivare la traccia durante gli spostamenti:

  • GiuLaPenna
  • SuLaPenna



    Basta questa breve premessa per iniziare il nostro viaggio.

    Dando opportuni comandi possiamo istruire la Tartaruga su come disegnare figure piane. La novità di un approccio geometrico di questo tipo sta nel fatto che i movimenti della tartaruga (riportati sullo schermo se la penna è giù, ovvero se ha la funzione scrittura attivata) non sono il risultato di informazioni globali che stanno al di fuori dell'entità, come quelle codificate in un'equazione, bensì sono il risultato di valutazioni e decisioni locali prese dalla tartaruga.


    Ad esempio come disegnare una circonferenza?

    Una procedura tradizionale calcola i punti della circonferenza e li traccia estraendo tali informazioni dall'equazione: 
    x^2 + y^2 = R.


    Per ottenere lo stesso risultato con una tartaruga è invece sufficiente la seguente procedura:

    ripeti 360 volte
      • vai avanti di un trattino 
      • destra di un grado








    In questo modo si ottiene un'approssimazione di un cerchio tanto migliore quanto minore è la lunghezza del tratto.


    Allo stesso modo è possibile tracciare un quadrato impartendo all'oggetto i seguenti comandi:

    ripeti 3 volte
      • vai avanti di un tratto L
      • destra di 90°





    Con le istruzioni opportune la nostra Tartaruga sarà capace di tracciare triangoli, rettangoli, rombi  e poligoni di ogni sorta.

    Un’altra caratteristica interessante è la possibilità di raggruppare queste istruzioni in file detti procedure e richiamare tali procedure ogni qualvolta occorre eseguire quelle istruzioni.

    Una procedura LOGO inizia sempre con la parola chiave per seguita dal nome della procedura e chiusa dalla parola chiave fine, all’interno andranno le istruzioni del corpo della procedura stessa.

    Una procedura può essere invocate da altre procedure così come auto-invocata da se stessa ed è proprio in questo modo che realizziamo funzioni ricorsive con il LOGO.


    Tracciare figure elicoidali


    Scrivendo una semplicissima procedura ricorsiva è possibile tracciare diverse figure elicoidali molto suggestive e vedere la Tartaruga all’opera.


    Queste sono le istruzioni da scrivere


    per eliche :L :T
    se :L <  181
    [
        destra :T                
        avanti :L
        eliche :L + 1 :T
    ]
    fine


    In seguito sono riportate alcune immagini prodotte dalla procedura con i relativi valori di L e T. 

    L = 1 e T= 50. 

    L = 1 e T= 51.

    L = 1 e T= 70.

    L = 1 e T= 89.

    L = 1 e T= 102.

    L = 1 e T= 121.

    Osservare, semplicemente, le figure generate non rende onore al lavoro della Tartaruga. 
    Vi invito a scrivere e provare il programma, in quanto c’è qualcosa di magico nel guardare la Tartaruga mentre fa il suo lavoro, soprattutto i bambini rimangono ipnotizzati da queste linee tracciate con tratto netto e precisione millimetrica. 

    Per poter osservare meglio la fase di generazione della figura è possibile inserire un ritardo di qualche decimo di secondo inserendo l’istruzione aspetta 2 immediatamente prima di richiamare la procedura elica al suo interno.


    I Frattali


    Il triangolo di Serpinsky

    per serpinsky :L :N
    se :N > 1
    [
     ripeti 3
                [
     serpinsky :L / 2 :N - 1
     avanti :L
     destra 120
    ]
    ]
    fine





    Il cristallo di neve

    Cerchiamo di tracciare con l’aiuto della nostra Tartaruga il profilo del classico cristallo di neve.

    Scriviamo  quindi la seguente procedura ricorsiva

    per generatore :L :N
    sealtrimenti :N > 1
    [
    generatore :L / 3 :N - 1
    sinistra 60
    generatore :L / 3 :N - 1
    destra 120
    generatore :L / 3 :N - 1
    sinistra 60
    generatore :L / 3 :N - 1]
    [
    avanti :L
    aspetta 2
    ]
    fine






    In realtà con questa procedura otteniamo solo un pezzo del fiocco di neve. Risolviamo il problema creando una nuova procedura che chiameremo iniziatore che a sua volta chiama la procedura generatore sui tre lati di un triangolo equilatero.


    per iniziatore :L :N


      destra 30
      generatore :L :N
      destra 120
      generatore :L :N
      destra 120
      generatore :L :N
      destra 120
    fine



    Il risultato lo si può osservare con chiarezza nelle figure successive che mostrano le figure tracciate con livello di iterazione da 1 a 6.











    E ci salutiamo con il proposito di andare avanti nel nostro viaggio nella ricorsione. La prossima volta ci occuperemo di tessiture riempitive e di Sistemi di Lindenmayer la cui idea i lettori più attenti l'avranno potuta scorgere in questo articolo. 
    I Sistemi di Lindenmayer ci permettono di scoprire le similitudini che esistono tra le piante e i concetti matematici che abbiamo trattato.

    Al prossimo post.






    Nessun commento:

    Posta un commento

    Post più popolari