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.

3 thoughts on “Creare in modo matematico oggetti non matematici (con OpenSCAD)

  1. Aurora Abatemattei ha detto:

    A leggere questo interessante articolo viene voglia di mettersi immediatamente al pc aprire LibreLogo e inserire i codici da lei indicati per far realizzare alla tartaruga un albero tanto simile alla realtà….. e poi sarebbe fantastico passare alla stampa 3D.
    Appena il nostro Atelier a scuola sarà pronto ci proverò sicuramente, commettero’ svariati errori, ma mi serviranno per correggermi e raggiungere l’obiettivo:
    realizzare gli alberelli per i miei plastici a scuola e completarli con le
    pitturazioni dei miei piccoli alunni.
    Infinite grazie Prof., per i continui stimoli ad apprendere e sperimentare, che ci date.
    Saluti
    Aurora Abatemattei

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...