La risposta definitiva al quesito di Marta

Il 6 novembre 2016, alle 22:03, ricevevo da una studentessa, Marta Veloce,  una decina di pagine di riflessioni in equilibrio fra esplorazione estetica e ragionamento geometrico. Lo scritto si concludeva con la formulazione di una congettura sulla chiusura delle figure geometriche emerse dalla sua esplorazione. Non era un compito assegnato ma un’iniziativa spontanea. E non è stato l’unico caso. Capita con una certa frequenza che gli studenti mi inviino considerazioni spontanee o approfondimenti, delle volte nella forma di testi al di fuori delle normali consegne, altre ad arricchire gli elaborati richiesti in vista degli esami.

Dedico quindi, per inciso, questo articolo a quei colleghi che sanno parlare solo in termini negativi delle “nuove generazioni”. Io dissento fermamente e mi pare di avere elementi molto solidi a favore di una visione completamente diversa, molto più ottimista. Del resto, va di moda parlare male, un po’ di tutto. Mi oppongo recisamente a questo triste e improduttivo costume.

Dunque Marta mi ha inviato il suo testo durante la prima edizione del Laboratorio di Tecnologie Didattiche a Scienze della Formazione Primaria il 6 novembre 2016. Il testo nella sua forma originale può essere letto nella sezione 10.2 del Piccolo Manuale di LibreLogo (7.2 MB). Qui voglio raccontare la storia, chi vuole capire le questioni matematiche può andare a leggere il capitolo 10 del manuale, in particolare la sezione 10.4.

In sostanza Marta disegna una casetta, tipico passaggio iniziale nel percorso di apprendimento di Logo.

FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 30
FORWARD 100
RIGHT 120
FORWARD 100

mar-1

Marta si mette a giocare con questa casetta, come farebbe un bambino incuriosito e tranquillo – mostrando con questo di avere assimilato uno degli aspetti fondamentali che cerchiamo di evidenziare nel laboratorio. Fa ripetere il disegno più volte, scoprendo così che ogni volta viene disegnata un nuova casetta che tuttavia non si distingue, perché perfettamente sovrapposta alla precedente. Ma se dopo le seleziona e le sposta con il mouse, ecco che come in un gioco di prestigio si forma un villaggio. Insomma il fatto interessante è che Marta sperimenta con Logo ma sperimenta anche l’atteggiamento che immagina un giorno di indurre nei suoi bambini, mutatis mutandis.

Non paga di questa prima esplorazione ne prova un’altra, introducendo una deviazione arbitraria dopo avere disegnato una casetta e ripetendo il processo un numero indefinito di volte. Questo si realizza aggiungendo un’istruzione di deviazione, ad esempio RIGHT 30, dopo avere disegnato la casetta e ponendo il tutto in un ciclo REPEAT, come si vede dal codice seguente dove abbiamo evidenziato le nuove istruzioni:

REPEAT [
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 30
FORWARD 100
RIGHT 120
FORWARD 100
RIGHT 30
]

A questo punto si lancia in una serie di prove e considerazioni geometriche, osservando cosa succede e cambiando l’angolo di deviazione finale – 30, 45, 60 ecc. – meravigliandosi per la varietà di forme che emergono.

mar-7
Questo è il disegno che viene con una deviazione finale di 70°

A furia di tentare nuove configurazioni si rende conto che la Tartaruga da principio svolge il disegno ma da un certo punto, quando questo ha raggiunto una sua naturale simmetria, lo ripercorre all’infinito, senza aggiungere più nulla di nuovo. E qui si pone la domanda: esiste una regola secondo la quale si possa prevedere quand’è che il disegno sarà completato?

Gradi rotazione rispetto alla verticale Numero di volte che il programma deve riavviarsi per tornare a posizione
”home”
15 24
30 12
60 3
70 36
100 9
120 6
240 6

Dopo avere compilato questa tabella conclude Marta:

Purtroppo non sembra emergere alcuna relazione. . . . E qui il pensiero si sofferma e prende respiro… Forse potremmo fare altre ipotesi?

Il mio dovere primario, nel (temporaneo) ruolo di professore universitario, è quello di rispondere agli studenti. Questo dovere supera quello della ricerca e supera anche la semplice “didattica erogativa”, in una scala di valore, perché la domanda difficile di uno studente rappresenta il premio di un percorso dove ricerca e insegnamento hanno innescato una scintilla creativa nella mente di un giovane. Non c’è niente di più alto e di più desiderabile.

Domande come quella di Marta sono destabilizzanti perché è difficile rispondere. A volte la risposta non è prontamente disponibile. Sono domande vere, domande di ricerca, per tentare di rispondere alle quali occorre onestà intellettuale e umiltà. In classe discutemmo approfonditamente la questione e spiegai subito che la soluzione vera, quella matematica io non l’avevo. Una soluzione matematica è quella che consente di risolvere il quesito in tutte le condizioni possibili. È una soluzione generale. In quella circostanza sviluppai una risposta che consentiva di rispondere al quesito di Marta ma solo nei casi da lei esplorati e esposti nella tabella alla fine del suo elaborato. Si trattava cioè di una soluzione euristica, ovvero una soluzione basata su ragionevoli intuizioni ma non ancora sostenuta da un’argomentazione teorica esaustiva. La risposta, ancorché insufficiente, aveva tuttavia valore didattico perché ci consentiva di mettere a fuoco il significato di verità matematica, tramite il concetto di soluzione euristica.

Successivamente, durante il corso di perfezionamento “Le competenze digitali nella scuola”, attivato presso il Dipartimento di Scienze della Formazione e Psicologia dell’Università di Firenze nell’anno accademico 2016/2017, sotto la direzione della collega Ranieri, uno dei corsisti, Alberto Averono riprese in mano la questione proponendo una soluzione informatica. L’idea era quella di fornire alla Tartaruga la capacità di riconoscere il proprio stato iniziale, in modo da potersi fermare esattamente in quel punto, a partire dal quale avrebbe solo potuto ripetere il percorso fatto. Una soluzione del genere può essere generata per via software, introducendo delle istruzioni che consentano di confrontare lo stato corrente della Tartaruga con quello iniziale. Queste considerazioni hanno consentito di mettere in luce due fatti molto importanti: il concetto di “stato” di un sistema, la Tartaruga in questo caso, e la nozione di numero digitale, quale pallida approssimazione dei numeri matematici. Questi fatti sono stati analizzati nella sezione 10.3 del Piccolo Manuale di LibeLogo. In ogni caso, anche se l’approfondimento di Alberto si è rivelato didatticamente assai proficuo, non ci ha fornito la soluzione matematica che desideravamo.

E infine è arrivata anche questa ma è stato necessario approfondire la teoria, cosa che non mi sarei mai aspettato di dover fare in queste circostanze. Non mi sarei messo a studiare la Turtle Geometry se non avessi ricevuto questo stimolo, perché cerco di stare attento a offrire conoscenze che abbiano qualche probabilità di essere utilizzate nel lavoro di insegnante. Ma una sola domanda è sufficiente a cambiare le carte in tavola e, a posteriori, riconosco che i frutti sono stati copiosi, anche al di là di quanto sto qui scrivendo.

Ebbene, le questioni affrontate da Marta in sostanza sono quelle che si sono posti Abelson e diSessa nel primo capitolo del loro trattato sulla Turtle Geometry (MIT Press, 1986). Nella sezione 10.4 della versione 1.1 del Piccolo Manuale di LibreLogo ho descritto in dettaglio i tratti essenziali della soluzione generale del problema di Marta, fornendo anche il codice per attuarla.

La soluzione del quesito si riduce a una regola assai semplice ma si basa su tre teoremi e un lemma. Il lettore non matematico, la norma qui, non si deve spaventare. Noi qui non ripercorriamo le dimostrazioni di questi teoremi, dovremmo divagare troppo. Per capire il significato di un teorema non occorre seguirne la dimostrazione, questa serve “solo” a garantire che il teorema sia vero: un lavoro fondamentale, ed è il matematico che si prende la briga di farlo. Talvolta le dimostrazioni di teoremi apparentemente semplici sono incredibilmente complesse, e poco hanno a che vedere con la comprensione del senso del teorema. Qui enunciamo i teoremi e descriviamo i concetti che vi compaiono perché questo serve a comprendere meglio il senso della Geometria della Tartaruga e del suo impiego didattico.

Teorema del percorso chiuso: La deviazione totale lungo un qualsiasi percorso chiuso è un multiplo intero di 360.

Questo teorema fornisce il contesto generale nel quale si inquadra la soluzione al nostro problema.

Il numero intero, che esprime il multiplo in questione si chiama “numero di rotazioni” (rotation number). Lo chiamiamo qui R.

Per deviazione totale (total turn) si intende la somma algebrica di tutti gli angoli di cui la Tartaruga ha ruotato lungo il percorso. Ad esempio il frammento di codice RIGHT 20 FORWARD 10 LEFT 5 produce una deviazione totale di 15° perché la somma algebrica delle deviazioni è pari a 20-5.

Un percorso si intende che sia chiuso qualora la Tartaruga si ritrovi esattamente nello stato da cui era partita. È bene capire che ciò non significa solo raggiungere il punto di partenza ma arrivarci anche con la medesima orientazione perché, ricordiamo, nella Geometria della Tartaruga conta lo “stato” che comprende sia posizione che direzione della Tartaruga. Il concetto di stato è fondamentale per tutte le scienze ed è importante approfittare di questa occasione per proporlo in modo semplice ai bambini.

Aiutiamoci con un disegno per comprendere il senso di questo teorema.

percorsi

Quali sono i percorsi aperti? Provate a immaginare i valori R dei percorsi chiusi. In fondo al post trovate la soluzione.

Teorema del percorso chiuso semplice: La deviazione totale lungo un qualsiasi percorso chiuso semplice è di 360°.

Qui, oltre alle definizioni precedenti va aggiunta quella di percorso chiuso semplice, che è un percorso senza alcun incrocio. Il segno è determinato dal verso di rotazione: positivo il senso orario, negativo quello antiorario.

Questo teorema è un caso particolare del precedente ed è quello che serve, ad esempio, per il calcolo degli angoli di deviazione nel disegno di un poligono regolare: essendo la deviazione totale sempre pari a 360°, dato il numero N di lati del poligono, e il fatto che tutte le singole deviazioni sono eguali fra loro, ciascuna di esse risulterà pari 360/N.

Teorema di chiusura di una procedura POLY: Un percorso tracciato da una procedura POLY si chiude esattamente quando la deviazione totale raggiunge un multiplo di 360°.

Ecco, qui Abelson e diSessa si pongono sostanzialmente la stessa domanda di Marta, ma a proposito di una “procedura POLY”, anziché di una casetta. Vediamo cos’è una procedura POLY e qual è il nesso con le casette di Marta. Una procedura POLY è del tipo

TO POLY LATO ANGOLO
REPEAT [
FORWARD LATO
RIGHT ANGOLO
]
END

oppure del tipo

TO POLY LATO ANGOLO
FORWARD LATO
RIGHT ANGOLO
POLI LATO ANGOLO
END

Le due versioni differiscono unicamente per il fatto che la prima usa il costrutto
REPEAT mentre la seconda impiega la ricorsione. È utile osservare che, dei due parametri richiesti da POLY, il primo, LATO, determina solo la scala del disegno, mentre il secondo, ANGOLO, determina la forma della figura. È su questo parametro che ci concentremo quindi nel seguito. Il parametro LATO può essere utilizzato liberamente per aggiustare la scala della figura ma non influenza in alcun modo la sua forma né, di conseguenza, la questione della chiusura della medesima.

Qui richiamo l’attenzione sul come un matematico non esiti a enunciare e dimostrare un teorema fra i cui elementi compare un frammento di codice, quale è POLY. Questo lo dico a coloro che amano dividere il mondo in pezzi: il coding non serve ma occorre concentrarsi sui fondamentali, matematica ecc. Sono atteggiamenti superficiali, dannosi e francamente irritanti.

Vediamo alcuni esempi realizzati con la procedura POLY, dove sotto ad ogni disegno è riportato il valore della variabile ANGOLO con cui è stato ottenuto.

poly1

Si invita il lettore a copiare uno dei semplici codici di POLY e a sperimentarli in LibreLogo.

Facendo girare la procedura POLY, la Tartaruga non si ferma dopo avere disegnato la figura ma la ripassa all’infinito perché è priva di un criterio di stop. Ma quand’è che la figura si chiude, nel senso che viene completata? Questo teorema fornisce il criterio fondamentale per rispondere alla domanda. Guardando i casi particolari raffigurati, vediamo che quando l’angolo è un sottomultiplo di 360 allora la figura è un poligono regolare. In questi casi il fatto è intuitivo: il poligono si chiude quando sono stati disegnati tutti i suoi lati, in pratica in un numero di passi pari a 360/ANGOLO. Quando invece l’angolo non è un sottomultiplo di 360 non è così semplice ma il teorema ci dice che in ogni caso la figura si chiuderà la prima volta che il numero di passi sarà eguale a un multiplo di 360.

Ma possiamo utilizzare questo teorema per rispondere al nostro quesito? Di fatto no, perché POLY non riproduce la struttura dei disegni di Marta, basati sul tracciamento della classica casetta più una deviazione finale. Tuttavia, fortunatamente, la Geometria della Tartaruga contiene anche un lemma (i lemmi sono teoremi che derivano molto direttamente da un altro teorema, non ci serve sapere altro a riguardo qui) che è, finalmente quello che fa al caso nostro:

Lemma: Qualsiasi programma costituito dalla ripetizione di un ciclo di base composto da comandi alla Tartaruga si comporta come un programma POLY al quale sia stato assegnato un angolo pari alla deviazione totale T di un singolo ciclo.

Conviene qui figurarsi cosa sia un “programma costituito dalla ripetizione di un ciclo di base composto da comandi alla Tartaruga”. Comandi alla Tartaruga sono per esempio quelli di direzione, RIGHT e LEFT, e quelli di movimento, FORWARD e BACK. Questi sono detti comandi di “cambiamento di stato”, perché sono in grado di alterare lo stato della Tarturga, determinato da posizione e direzione. Se chiamiamo GPOLY questo tipo di programma, questo ha una struttura del tipo seguente:

TO GPOLY LATO ANGOLO
REPEAT [
Qualsiasi sequenza di comandi di ”cambiamento di stato”
]
END

Come in POLY qui abbiamo i parametri LATO e ANGOLO ma non è affatto detto che siano necessari. Potremmo avere una sequenza di comandi di “cambiamento di stato” fissa, che non ha bisogno di parametri, come nell’esempio della casetta di Marta:

REPEAT [
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 30
FORWARD 100
RIGHT 120
FORWARD 100
RIGHT 30
]

dove l’ultima istruzione è quella con cui Marta “perturbava” il ciclo di ripetizione delle casette. Inseriamo quindi questo frammento di codice in GPOLY:

TO GPOLY LATO ANGOLO
REPEAT [
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 90
FORWARD 100
RIGHT 30
FORWARD 100
RIGHT 120
FORWARD 100
RIGHT 30
]
END

Con questo siamo arrivati in fondo alla storia, perché abbiamo ricondotto il quesito di Marta nell’ambito di una teoria dimostrata. Qui mi limito a enunciare il risultato, chi vuole sapere di più può andare a leggere le sezioni 10.3 e 10.4 del Piccolo Manuale di LibreLogo.

Il numero di cicli n necessari per chiudere la figura è data da

n=\mathrm{MCM}(T_m,360)/T_m

dove \mathrm{MCM}(n,m) rappresenta il minimo comune multiplo dei numeri interi n e m e T_m rappresenta la deviazione totale prodotta da ciascun ciclo.

Questa condizione di chiusura può essere facilmente codificata in Logo. Chi ci vuole provare può scaricare il programma GPOLY.odt che chiede la deviazione finale da usare nel codice di Marta poi calcola il numero di rotazione e disegna la figura. Il codice è visibile anche nella sezione 10.4 del Piccolo Manuale di LibreLogo.

Ci abbiamo messo più di un anno a rispondere alla domanda di Marta ma ne è valsa la pena perché abbiamo approfondito molti fatti interessanti.



Risposta alla domanda sui percorsi chiusi: 1: aperto; 2: $R=0$; 3: $R=3$; 4: $R=1$; 5: $R=3$; 6: $R=2$; 7: aperto; 8: $R=-1$.

Aggiunti i sottotitoli in Bambara

Laboratorio Aperto di Cittadinanza Attiva

WhatsApp Image 2018-01-26 at 09.09.03La ricognizione linguistica che avevamo fatto in settembre aveva rivelato che le trenta persone ospitate nel CAS parlavano una decina di lingue, al di là, in alcuni casi, della conoscenza di una lingua ponte, quale francese o inglese.

In quell’occasione ci venne l’idea di aggiungere i sottotitoli in alcune di queste lingue al famoso video nel quale Nelson Mandela spiega il concetto di Ubuntu. A noi la cosa interessava perché il sistema operativo che adoperiamo per riciclare i computer destinati allo smaltimento è Ubuntu, o Lubuntu, una variante leggera per computer sottodimensionati. Il nome Ubuntu non è casuale, perché richiama il concetto della collaborazione disinteressata per il bene comune, che in questo caso è software liberofree software.

Recentemente sono arrivati alcuni ragazzi che hanno soggiornato in un CAS non lontano da qua. Sono ragazzi in gamba che hanno imparato discretamente bene l’italiano. Con loro possiamo…

View original post 127 altre parole

Creare in modo matematico oggetti non matematici (con OpenSCAD)

DSCF1583

Rombicosidodecaedri e spirali della Tartaruga  potrebbero dare l’impressione che con OpenSCAD si possano creare solo forme geometriche “perfette”. Invece non è così. Questo alberino, che potrebbe essere usato in un plastico ferroviario, è stato fatto con OpenSCAD. Com’è possibile? Abbiamo qui l’opportunità di mettere insieme due fatti interessanti: la simulazione matematica della casualità e l’autosimiglianza dei frattali. Parlare a scuola di caos e di frattali è perfettamente possibile e sarebbe estremamente istruttivo perché consentirebbe di capire come la natura utilizzi determinismo e caso, intercalandoli e intersecandoli finemente. Perfino la meccanica celeste, ritenuta per eccellenza rigorosamente deterministica, ha visto comparire il caso nella sua struttura, come nel caso della rotazione caotica del satellite di Saturno, Iperione. La comprensione della commistione di caso e determinismo in pressoché tutti i fenomeni naturali è uno dei risultati fondamentali ottenuti dalla scienza del Novecento. Il coding è uno strumento fondamentale per esplorare questo tipo di argomenti ed è intimamente connesso con essi, in tutti i campi della scienza.  Si parla molto oggi dell’impiego del coding e delle tecnologie nella scuola, non di rado a sproposito. E se ne parla molto male, come del resto di tutti gli argomenti pubblici oggi. Se ne parla facendo di ogni argomento un vessillo di parte: veramente un pessimo servizio alla cultura e quindi anche alla scuola, che tutti, da un lato come da quello opposto, sostengono di voler difendere. Sono invece fuori strada, gli uni e gli altri.

Ma torniamo al nostro, più gradevole, quesito: come è possibile produrre oggetti che sembrano naturali in un modo apparentemente del tutto deterministico, come con il codice OpenSCAD, fatto per esprimere matematicamente gli elementi classici della geometria, quali ad esempio parallelepipedi e sfere? Poiché il codice OpenSCAD può apparire un po’ complicato aiutiamoci con Logo, utilizzando la versione LibreLogo, che basta e avanza.

L’elemento fondamentale per descrivere le morfologie naturali è l’autosimiglianza a diverse scale spaziali. Nuvole, letti capillari, moto browniano,  piante, formazioni geologiche, galassie, sono innumerevoli gli esempi. In matematica questo concetto si esprime con i frattali. Il concetto di frattale è stato introdotto dal matematico Benoît Mandelbrot nel 1975 con una serie di lezioni al Collège de France e pubblicate nel libro “Les objects fractals: Forme, hasard et dimension” (Flammarion, Paris, 1975). La caratteristica che distingue la teoria dei frattali dalle teorie matematiche classiche, come succede anche in altri campi della matematica, è il fatto di essere fatta di matematica e computing, scientific computing per le precisione, il che vuol dire coding, montagne di coding. Oggi scienza vuol dire anche, imprescindibilmente, coding.

Per codificare il fenomeno dell’autosimiglianza lo strumento ideale è quello della ricorsività.

TO C1
REPEAT [ FORWARD 1 RIGHT 1 ]
END

TO C2
FORWARD 1 RIGHT 1
C2
END

CLEARSCREEN
HOME
# qui si può mettere
# indifferentemente C1 o C2
C2

In questo codice Logo le due procedure C1 e C2 ottengono lo stesso risultato – un cerchio – ma lo ottengono in maniera molto diversa. La prima, C1, si avvale di un ciclo, realizzato con l’istruzione REPEAT, la seconda, C2, esegue la stessa coppia di istruzioni – FORWARD 1 RIGHT 1 – ma una sola volta, senza ripetizioni; invece chiama se stessa, C2. Questo meccanismo, per cui una procedura chiama se stessa, generando così un ciclo infinito, si chiama ricorsione. Un meccanismo che si presta molto bene a riprodurre il fenomeno dell’autosimiglianza. Vediamo un esempio semplice.

TO TREE LL
IF LL < 10 [ STOP ]
FORWARD LL LEFT 50
TREE LL*3/5
RIGHT 100 TREE LL*3/5
LEFT 50 BACK LL
END

CLEARSCREEN
HOME
TREE 50

Invito a sperimentare questo codice in LibreLogo, riflettendoci e seguendo i movimenti della Tartaruga, magari inserendo qua e là qualche istruzione SLEEP 1000, per rallentare e capire quello che succede. Ecco il risultato:

ll-albero-1

Un alberino stilizzato. Anche qui, può essere molto istruttivo giocare con i parametri: lunghezza e decremento progressivo dei tratti, rotazioni sinistre e destre, criterio di stop, cercando di capirne il ruolo esatto nella generazione del frattale.

Ci può piacere ma potremmo desiderare di farne una versione più realistica.

Mandelbrot descrisse i frattali come uno strumento matematico adatto a descrivere fenomeni naturali determinati da un insieme di cause troppo grande e complesso per essere affrontati con gli strumenti matematici analitici classici. È una delle situazioni nelle quali la scienza del Novecento ha dovuto chinare la testa di fronte alla presenza ubiquitaria del caso. Con il nostro codice frattale abbiamo simulato l’aspetto essenziale del fenomeno di crescita di un albero, ovvero l’autosimiglianza che caratterizza le biforcazioni dei rami. L’abbiamo fatto in un modo semplificato ma pur credibile: ad ogni biforcazione un ramo a sinistra e uno a destra.

Ma se volessimo simulare la forma di un albero in maniera un po’ più verosimile? In questo caso dobbiamo ricorrere ad un altro strumento matematico che consenta l’estrazione di numeri casuali. Sembrerebbe una cosa impossibile da farsi con una macchina essenzialmente deterministica come i computer che noi conosciamo oggi (per ora). E in effetti è così ma i matematici hanno escogitato algoritmi in grado di generare numeri in modi che di fatto sono deterministici ma sono abbastanza complessi da “far perdere le tracce” così da apparire casuali. In effetti si parla di pseudorandom number generation: generazione di numeri pseudocasuali. Questa è un’altra importante branca dello scientific computing, dove matematica e computing sono indissolubilmente fusi e dove tutto si risolve in coding. Il sottoscritto ci si è imbattuto nel 1977, trovandosi nella necessità di risolvere un problema per la tesi che solo mediante i numeri pseudocasuali poteva essere risolto. Il lavoro si sbloccò grazie a un libro che trovai nella biblioteca di un’università americana (Fresno State University). A quei tempi non c’era Internet e dove io facevo la tesi a Firenze nessuno aveva esperienza di numeri pseudocasuali. Grazie a quel libro (a memoria: Random Number Generation and Monte Carlo Methods, se ritrovo il libro aggiorno questo riferimento) mi laureai imparando i segreti di metodi matematici che si sostanziavano in coding, già nel 1977.

Oggi i generatori di numeri pseudocasuali sono inclusi in qualsiasi linguaggio, anche in Logo: con l’istruzione RANDOM 100 per esempio si generano numeri casuali uniformemente distribuiti fra 0 e 99 inclusi. Introduciamo quindi un margine di incertezza nelle rotazioni sinistre e destre del nostro algoritmo:

TO TREE LL
AL = 25
AR = 50
A = AL - 25 + RANDOM 50
IF LL < 5 [ STOP ]
FORWARD LL
LEFT A
TREE LL*3/5
RIGHT A*2
TREE LL*3/5
LEFT A
BACK LL
END

CLEARSCREEN
HOME
TREE 50

Lascio al lettore il divertimento di capire dove e cosa è cambiato rispetto al codice precedente. Vediamo il risultato:

In questo modo, ogni volta che rigiriamo il codice viene un albero diverso. Ne mostriamo tre successivi. Soddisfacente ma possiamo fare meglio, introducendo una certa variabilità anche sulla lunghezza dei rami:

TO TREE LL
AL = 25
AR = 50
A = AL - 25 + RANDOM 50
L = LL – 5 + RANDOM 10
IF L < 5 [ STOP ]
FORWARD L
LEFT A
TREE L*3/5
RIGHT A*2
TREE L*3/5
LEFT A
BACK L
END

CLEARSCREEN
HOME
TREE 50

Il codice è cambiato davvero di poco ma il risultato è notevole:

Qui abbiamo ulteriori parametri con cui giocare per ottenere figure diverse, ovvero quelli che regolano la casualità. Giusto per dare una mano al lettore, nel caso della lunghezza dei rami, nell’istruzione

L = LL – 5 + RANDOM 10

RANDOM 10 genera numeri fra 0 e 9, -5 + RANDOM 10 genera numeri fra -5 e 4. Si possono fare molte cose diverse e si può fare anche meglio…

A noi questo giochetto con Logo ci è servito per vedere in modo semplice e immediato i concetti che stanno alla base anche del codice OpenSCAD con cui abbiamo prodotto l’alberino di plastica, codice più difficile da interpretare per chi non è abituato a quel tipo di codifica. I curiosi possono andare a esplorare la pagina dell’autore dell’oggetto in Thingiverse: Customizable Procedurally Generated Trees. Così appare il modello 3D dell’albero in OpenSCAD:

proc-gener-tree

Ricordo che stiamo parlando esclusivamente di software libero: sia LibreOffice con LibreLogo che OpenSCAD sono free software e sono offerti per tutte e tre le principali piattaforme: Windows, Mac e Linux. La conoscenza non ha necessariamente bisogno di grandi risorse.

Ora mostro le fasi di produzione di un oggetto del genere, utilizzando la stampante base della Kloner3D.

Questo è l’oggetto appena stampato. Si intravede l’albero ma c’è anche dell’altro: si tratta delle strutture posticce di supporto che servono a sostenere le parti del modello a sbalzo. Tali supporti sono necessari perché le stampanti 3D a fusione di materiale plastico, depositando uno strato sull’altro, hanno bisogno di una sorta di impalcatura altrimenti la plastica fusa cadrebbe giù. La piattaforma (in gergo raft) serve a migliorare l’adesione del modello al piatto, che altrimenti con il progredire della stampa dei livelli superiori si può staccare, cosa che è successa al sottoscritto. Sia  il supporto che il raft sono determinati da vari parametri: si deve andare un po’ per tentativi, barcamenandosi fra ragionamento e intuito.

DSCF1533

Ora va tolto il supporto…

DSCF1537

E ci vuole molta pazienza…

DSCF1539

DSCF1540

E attenzione perché si fa presto a rompere qualche parte del modello per sbaglio, cosa che è regolarmente successa:

DSCF1545

Ma non tutto il male viene per nuocere. In fin dei conti senza il tronco con la sua base si semplifica la pittura del modello, se uno lo vuole colorare. Poi con un goccio di colla si riattacca facilmente. Io volevo dipingere il pezzo e mi sono anche divertito ad utilizzare i colori a olio. Si possono usare anche gli acrilici ma sono meno coprenti e meno brillanti. In compenso sono più facili da usare, essendo solubili in acqua, per i bambini o uno poco cresciuto come il sottoscritto… ho dipinto molte altre cose intorno…

DSCF1554

E infine…

DSCF1583

Matematica, coding, stampa 3D, lavorazione manuale del pezzo, pittura. A me pare interessante.