Tutti sanno che nell’ottobre del 1917 ci fu una rivoluzione.
Fu proprio in quel mese, infatti, che uscì il primo numero della rivista Lo stile intorno alla quale si sviluppò il movimento artistico del neoplasticismo. Movimento che nel campo della pittura si basava su principi astratti e geometrici. Proprio per questo si fa riferimento al neoplasticismo anche definendolo astrattismo geometrico.
Tra i fondatori della rivista e del movimento ci fu il pittore Piet Mondrian le cui opere più famose sono composizioni dove compaiono soltanto linee nere orizzontali o verticali che dividono la tela in figure geometriche rettangolari o quadrate, alcune delle quali – la minoranza – sono colorate utilizzando soltanto i colori primari (rosso, giallo e blu). Molte parti, quindi, rimangono bianche.
Ma questo blog non parla di coding e del linguaggio di programmazione FreeBASIC? Cosa c’entra dunque l’arte?
In realtà esiste un elemento in comune tra queste due forme di espressione umana: la creatività.
Sebbene la creatività interessi molte fasi del ciclo della produzione del software (per esempio quella relativa al problem solving), qui vorrei concentrarmi soltanto su uno specifico campo di applicazione dello sviluppo del codice che è quello della cosiddetta Arte generativa: ovvero scrivere del codice che in maniera autonoma, o semi-autonoma, generi delle opere d’arte.
Generatore di immagini in stile Mondrian
Questo blog ha un taglio molto pratico e quindi vediamo subito insieme un esempio di come creare un piccolo programma in FreeBASIC che generi in maniera casuale – e quindi autonoma – delle immagini che richiamino almeno in parte lo stile di Mondrian.
Algoritmo
Ecco in sintesi i passi del nostro algoritmo:
- Creare una finestra con l’istruzione screenres.
- Inserire all’interno di un ciclo do-loop il codice per raccogliere l’input dell’utente attraverso l’istruzione getkey e poi con la struttura di controllo select case discriminare la prosecuzione delle operazioni:
- In un caso disegnare le figure con l’istruzione line le cui dimensioni e colore sono definiti in maniera aleatoria attraverso l’istruzione rnd che genera un numero pseudo-casuale basato sull’algoritmo Mersenne Twister.
- Nell’altro uscire dal programma.
Codice sorgente
''project: mondrian.bas ''license: GNU GPL v3 ''version: beta ''date: September 20, 2020 ''description: Mondrian style images generator ''author: ciuco informatico ''web: https://ciucoinformatico.home.blog/ dim as long key ''key entered dim w as integer ''width of canvas dim h as integer ''height of canvas declare sub draw_image(w as integer, h as integer) ''canvas's size w = 1000 h= 617 screenres w, h, 32 windowtitle("fb_mondrian.bas | Mondrian style images generator") ''color: '' foreground: black '' background: white color(rgb(255,255,255),rgb(0,0,0)) cls 'menu print "Press <Enter> to generate the image." print "Press <Esc> to exit the programme." ''seeds the random number generator randomize do key = getkey select case keycase 13 ''carriage return
cls
draw_image(w, h)
case 27 '' quit
exit do
case else ''none
end select
''to avoid unwanted or repeated characters, ''this loop works until the inkey buffer is empty while inkey <> "": wend loop ''draws image sub draw_image(w as integer, h as integer) dim free_w as integer '' free width dim free_h as integer ''free height dim as integer fill_color dim as integer x1, y1, x2, y2 = 0 dim as integer margin = 10 free_w = w free_h = h doy2 = int(rnd * h) + y1
do
x2 = int(rnd * w) + x1
fill_color = int(rnd * 8) + 1
select case fill_color
case 1 ''yellow
line(x1,y1)-(x2,y2),rgb(255,255,0),BF
case 2 ''red
line(x1,y1)-(x2,y2),rgb(255,0,0),BF
case 3 ''blue
line(x1,y1)-(x2,y2),rgb(0,0,255),BF
case 4 to 8 ''white
line(x1,y1)-(x2,y2),rgb(255,255,255),BF
case else
end select
x1 = x2 + margin
loop until x2 > w
x1 = 0
y1 = y2 + margin
loop until y2 > h end sub
Provate pure liberamente a modificarlo.
Ciao e al prossimo articolo. 🙂