Continua...

Come continuare?
Come costruire un progetto?

Si propone un'attività che trae ispirazione dalle piastrelle di Truchet rivisitate da Cyril Stanley Smith e raccontate da Robert Bosh nel suo libro "Opt Art: From Mathematical Optimization To Visual Design".
La suggestione per iniziare un nuovo progetto arriva spesso così, da un'immagine su un libro, da uno sguardo in rete cercando cose belle o da un'immagine vista per sbaglio.
Arte e matematica si incontrano spesso, la creatività sembra proprio essere figlia dei numeri.

I moduli proposti sono quadrati con disegnate linee o archi di cerchio, come nella figura sopra. Si tratta di 9 piastrelle che possono creare combinazioni geometriche guidate o addirittura creare riproduzioni di quadri famosi come "La Gioconda" oppure combinazioni lasciate al caso.

Come prima cosa si suggerisce di creare la procedura per tracciare la griglia di base, una griglia che deve poter essere quadrata o rettangolare a seconda della scelta artistica. Una variabile indicherà il numero di elementi per colonna e riga, si tratta di un array di due elementi.

Per il disegno di ciascun modulo si propone di utilizzare la funzione CIRCLE, una funzione che permette di tracciare anche linee rette, come visto nel capitolo 6.
Si può provare ponendo la griglia ad un elemento per uno e creare il disegno per il primo modulo, una linea verticale. Ci si rende subito conto che è importante posizionare la tartaruga nel giusto punto di origine della curva. Per fare questo si sfrutta il valore di modulo partendo dai valori di origine che si trovano in alto a sinistra del quadrato di base.

Creati i disegni per tutte le piastrelle, e le procedure, e messi alla prova, è ora di creare una procedura per disegnare sulla griglia di base. Può essere utile, per verificare facilmente i risultati, cominciare da una 2x3 e poi, se tutto funziona, scegliere i valori desiderati.
Inizialmente creare una procedura per ogni disegno. Per disegnare le piastrelle occorre sceglierle, in modalità casuale o decidendo per un preciso disegno per una precisa posizione con una matrice. Una nuova procedura può essere di aiuto e si può passare come parametro il numero della piastrella scelta e la posizione di colonna e riga.

In questo modo sono state create tante procedure quante sono le piastrelle, in ognuna delle procedure vengono ripetute le stesse istruzioni per il posizionamento della tartaruga, la direzione, lo stato della penna e viene richiamata la funzione CIRCLE.
Troppa fatica per un programmatore…

Si può creare un dizionario, un dizionario è una coppia di chiave e valore, utile quando si vuole dare un preciso nome di chiave per recuperare il valore di quella chiave. Ad esempio si può creare un dizionario dei mesi dell'anno, chiamato dictMesi con chiave il nome del mese e valore il numero dei giorni, per far scrivere il valore dei giorni di luglio, ad esempio, sarà sufficiente scrivere LABEL dictMesi[“luglio”], l'indice non è più un numero ma un valore, verrà scritto il valore 31.

Nel caso delle piastrelle verrà utilizzato ugualmente un numero a cominciare da 0 come per gli array. Questo non impedisce di personalizzare il codice rendendolo più "parlante" ed utilizzare delle sigle rappresentative del disegno, ad esempio: "LV" per la linea verticale, "LH" per quella orizzontale, "LVH" per la croce, "AAS" per arco in alto a sinistra e così via.
Per la funzione RANDOM sarà sufficiente indicare le sigle come in un array, così: RANDOM ["LV", "LH", "LVH", "AAS",...]
Per dichiarare un dizionario si scrive il nome seguito dal segno di uguale come per le variabili e gli array e si racchiude tra parentesi graffe.
Ad esempio, sempre restando sull'esempio dei mesi:

dictMesi = {
	"gennaio": 31,
	"febbraio": 28,
	"marzo": 31,
	...
	"ottobre": 31,
	"novembre": 30,
	"dicembre": 31
}
Ogni coppia di valori viene separata da quella seguente da una virgola e ogni coppia chiave valore viene identificata dai due punti. La chiave può essere un numero o una parola di soli caratteri alfanumerici, il valore può essere qualsiasi cosa anche un array. Se i valori sono array non necessariamente devono avere tutti lo stesso numero di elementi.

Al termine vengono richiamate le procedure per il disegno della griglia e delle piastrelle.

Di seguito i file di esempio da cui iniziare.
Il primo presenta unicamente il disegno dei moduli.
Il secondo file presenta una prima bozza di codice con diverse procedure, un primo approccio quasi istintivo.
L'ultimo file vuole provare ad introdurre delle ottimizzazioni di codice, riducendone le righe e, in un certo senso, aumentandone la complessità. Vuole presentare un diverso approccio alla soluzione del problema. Si introduce l'elemento dizionario come sfida per approfondimenti e per invitare a passare a linguaggi più strutturati come ad esempio Python.

Niente impedisce di andare oltre questi esempi, anzi, e provare nuove strade e nuovi approcci.
In questi script è stata sempre preparata la griglia come prima cosa, ma la griglia non è necessaria, è possibile creare il bordo della piastrella anche in fase di disegno delle linee.
Potrebbe anche non esserci una griglia. E magari separare le piastrelle con un piccolo spazio. Perché poi non colorare lo sfondo o le linee o entrambi?

Script Il codice è commentato e in alcuni casi sono state commentate anche istruzioni che sono proposte per matrici diverse o per la funzione random, per provarle è sufficiente togliere il punto e virgola del commento e commentare l'istruzione che non serve.
i moduli
prima bozza di script con una procedura per ogni piatrella
introduzione al dizionario di Python e prima ottimizzazione del codice

Per approfondire
Su Wikipedia le piastrelle di Truchet
Sito di Robert Bosch

Bibliografia
Robert Bosch, Opt Art: From Mathematical Optimization to Visual Design, Princeton University Press, 2019