Scratch e i “frattali”

Angelo Biolcati Rinaldi
CDJr
Published in
4 min readNov 24, 2018
La felce è un frattale, anche se lei probabilmente non lo sa.

Dopo aver imparato a creare nuovi mattoncini, con tanto di parametri, eccoci pronti per una nuova avventura nel fantastico mondo dei numeri. Oggi conosceremo il frattale che è fatto da una serie di frattali ed ognuno di questi è fatto da una serie di frattali ed ognuno di questi è fatto da una serie di frattali ed ognuno di questi è fatto da una serie di frattali ed ognuno di questi è fatto da una serie di frattali ed ognuno… ci sono frittelle di frutta che ricordano i frattali: ne ho mangiate a frotte, ma mai in fretta ;-)

Adesso definiamo un mattoncino che traccia un segmento di una certa lunghezza:

La cosa particolare è che abbiamo selezionato “Esegui senza aggiornamento dello schermo”. Questo significa che non vedremo il nostro gattino che “gira” per lo schermo mentre disegna. Niente animazione, massima velocità.

Il disegno viene uguale.

Ma… un momento: se il segmento è abbastanza lungo, potremmo divertirci a girovagare un poco invece di tirare una riga dritta… così, per vivacizzare la cosa :-)

Ecco il risultato:

proprio niente di speciale :-|

Invece di un unico segmento da 300 passi, qui ne abbiamo 4 da 100: un primo segmento che va dritto, altri 2 che vanno a spasso, e l’ultimo che rimedia le cose e arriva esattamente dove sarebbe dovuto arrivare quello unico da 300.

Concentriamoci sul singolo segmento: non sarebbe bello che anche lui si spezzasse in 4 con 2 giusti e 2 a spasso? Come possiamo modificare il nostro mattoncino in modo che faccia questo, fino ad un ragionevole livello di profondità? Non è per niente difficile: bisogna solo fare un salto logico nel fantastico concetto della recursività!

Capito il trucco? Dentro alla definizione del segmento, usiamo il mattoncino stesso. Se non ci fosse quel test all’inizio (lunghezza minore di 100) e non fossimo sicuri che ogni volta che usiamo il mattoncino lo facciamo diminuendo la lunghezza, rischieremmo di precipitare al centro della terra, inluppandoci, come diciamo noi programmatori. E invece tutto funziona a meraviglia e questo è il risultato, limitato nella sua profondità proprio per rendere più chiaro il concetto:

Un frattale che emette i primi vagiti :-) che carino!

Basta cambiare il test (lunghezza minore di 100) e continuare nella recursione finché lunghezza non scende sotto 10 per avere un bel risultato come questo:

Un frattale già più cresciuto

Il bello è che possiamo cambiare il modo di “andare a spasso” (ad esempio facendo un quadrato invece che un triangolo) e tutto il disegno ci viene dietro:

il fatto è che i quadratini si toccano e viene fuori questa strana piramide…

Se questo ragionamento recursivo lo facciamo su un albero, fatto da un tronco e una chioma, e il tronco può dividersi in due rami ognuno con la sua chiomettina e ogni ramo… cosa potrebbe saltar fuori? Cioè passare da questo:

a questo:

o addirittura a questo:

Sembra un cavolfiore! Qui il trucco è fare in modo che ogni ramo, dopo essere stato disegnato, rimetta la penna esattamente al punto di partenza, in modo che si possa fare simmetricamente il suo ramo gemello:

il test è rovesciato, rispetto al primo esempio: se “c’è posto” chiamiamo recursivamente

Scratch è un linguaggio semplice, ma permette di fare degli esperimenti veramente sofisticati e di studiare concetti molto profondi. Ha dei limiti, ovviamente; se volete superarli, date un’occhiata al cugino di Scratch, Snap!:

Scratch è cresciuto al MIT di Boston, Massachusetts, mentre Snap! viene da Berkeley, in California. Bene, alla prossima :-)

PS Compito a casa
Sto pensando che man mano che si scende nella recursione dell’albero, bisognerebbe fare il ramo più smilzo. Come modificare il mattoncino?

--

--

Angelo Biolcati Rinaldi
CDJr
Editor for

I’m a software developer using Embarcadero Delphi (since nov.1994 field test) for Win/Mac/iOS/Android/Linux native apps. Proud mentor of CodeDojoRavenna :-D