Corso di Processing – lezione 06

Gestione del colore in Processing ed utilizzo dei commenti

Il colore è un elemento essenziale nella grafica digitale. In Processing, la gestione dei colori avviene tramite il modello RGB (Red, Green, Blue), in cui ogni colore è definito dalla combinazione di tre valori compresi tra 0 e 255. Esploriamo ora come applicare il colore agli oggetti grafici nei nostri sketch.

1. Il Modello RGB

I colori sugli schermi dei computer vengono generati combinando le tre componenti principali:

  • Rosso (Red)
  • Verde (Green)
  • Blu (Blue)

Ciascuna componente può assumere valori da 0 (assenza di colore) a 255 (massima intensità). Per esempio:

1size(400, 400); // Imposta la finestra
2background(0, 0, 255); // Sfondo blu

Alcuni esempi di colori nel modello RGB:

  • Nerofill(0, 0, 0);
  • Biancofill(255, 255, 255);
  • Rossofill(255, 0, 0);
  • Verdefill(0, 255, 0);
  • Blufill(0, 0, 255);
  • Giallofill(255, 255, 0);
  • Cianofill(0, 255, 255);
  • Magentafill(255, 0, 255);

Selezione del Colore in Processing

Quando si lavora con i colori in Processing, può sorgere una domanda fondamentale: come faccio a conoscere i valori RGB di un colore specifico?

Per facilitare questa operazione, Processing mette a disposizione un Color Selector, uno strumento intuitivo che permette di scegliere facilmente un colore e ottenere i relativi valori numerici.

Come accedere al Color Selector

È possibile aprire il selettore di colori direttamente dall’ambiente di sviluppo di Processing andando su:
MenuStrumentiSelezionatore dei colori…

Una volta aperta la finestra del selettore, si può esplorare la gamma di colori disponibili e ottenere i relativi valori RGB(Rosso, Verde, Blu). Inoltre, lo strumento fornisce informazioni anche sui valori:

  • HSB (Hue, Saturation, Brightness)
  • Esadecimale (Hex), utile per il web design e altre applicazioni grafiche.

2. Applicare il colore agli oggetti

Per impostare il colore di riempimento di una figura, utilizziamo la funzione fill(), mentre stroke() permette di cambiare il colore del contorno.

Esempio: disegnare un cerchio colorato

1size(400, 400);
2background(200); // Sfondo grigio
3fill(255, 0, 0); // Colore rosso
4stroke(0, 0, 0); // Contorno nero
5ellipse(200, 200, 150, 150);

Esercizio: Prova a cambiare il colore del cerchio variando i valori RGB nella funzione fill().

3. Sfondo e Trasparenza

Il colore dello sfondo si imposta con background(). Possiamo anche gestire la trasparenza (canale alpha) aggiungendo un quarto parametro a fill() o stroke().

Esempio: trasparenza nelle forme

I due cerchi si sovrapporranno con un effetto di fusione del colore.

Esempio: aggiungi un terzo cerchio con un altro colore e verifica l’effetto.

1size(400, 400);
2background(50); // Sfondo scuro
3 
4fill(255, 0, 0, 150); // Rosso semi-trasparente
5ellipse(170, 200, 150, 150);
6 
7fill(0, 0, 255, 150); // Blu semi-trasparente
8ellipse(230, 200, 150, 150);
9 
10fill(255, 255, 0, 150); // Giallo semi-trasparente
11ellipse(200, 130, 150, 150);

4. Rimuovere il Contorno e il Riempimento

Processing permette di disattivare il contorno con noStroke() e il riempimento con noFill().

Esempio: Contorno e Riempimento

1size(400, 400);
2background(255);
3 
4noStroke(); // Nessun contorno
5fill(255, 0, 0);
6rect(50, 50, 100, 100); // Rettangolo rosso senza contorno
7 
8stroke(0); // Contorno nero
9noFill();
10ellipse(250, 200, 100, 100); // Ellisse senza riempimento

Esercizio: Prova a combinare noStroke() e noFill() in modi diversi.

5. Cambiare il Modello Colore: HSB

Oltre al modello RGB, Processing supporta HSB (Hue, Saturation, Brightness), che descrive il colore in termini di tinta, saturazione e luminosità.

Per usare HSB:

1colorMode(HSB, 360, 100, 100);
2fill(200, 80, 90);
3rect(100, 100, 150, 100);

Esercizio: Crea una griglia di rettangoli colorati con colorMode(HSB, 360, 100, 100) e varia i parametri.

6. Uniamo tutto insieme

1size(600, 630);
2background(255); // Sfondo bianco
3noStroke(); // Nessun bordo
4 
5fill(255, 0, 0, 150); // Rosso semi-trasparente
6ellipse(110, 100, 150, 150);
7 
8stroke(0); // Bordo colore nero
9fill(0, 0, 255, 150); // Blu semi-trasparente
10ellipse(300, 100, 150, 150);
11 
12stroke(255,0,0);  // Bordo colore rosso
13fill(255, 255, 0, 150); // Giallo semi-trasparente
14ellipse(490, 100, 150, 150);
15 
16stroke(0,0,255); // Bordo colore blu
17strokeWeight(4);  // Spessore bordo 4
18fill(255, 0, 0, 150); // Rosso semi-trasparente
19ellipse(270, 350, 150, 150);
20 
21stroke(255,255,0); // Bordo colore giallo
22strokeWeight(8);  // Spessore bordo 8
23fill(0, 0, 255, 150); // Blu semi-trasparente
24ellipse(330, 350, 150, 150);
25 
26stroke(255,0,255); // Bordo colore magenta
27strokeWeight(12);  // Spessore bordo 12
28fill(255, 255, 0, 150); // Giallo semi-trasparente
29ellipse(300, 280, 150, 150);
30 
31noStroke(); // Nessun bordo
32 
33fill(255, 0, 0, 150); // Rosso semi-trasparente
34ellipse(110, 530, 150, 150);
35 
36stroke(0); // Bordo colore nero
37strokeWeight(4); // Spessore bordo 4
38fill(0, 0, 255, 150); // Blu semi-trasparente
39ellipse(300, 530, 150, 150);
40 
41stroke(255, 0, 0, 100); // Bordo colore rosso semi-trasparente
42fill(255, 255, 0, 150); // Giallo semi-trasparente
43ellipse(490, 530, 150, 150);
44 
45stroke(0, 0, 0, 100); // Bordo colore nero
46strokeWeight(1);  // Spessore bordo 1
47fill(255, 255, 255, 100); // Bianco semitrasparente
48rect(20, 510, 560, 50);

7. L’Utilità dei commenti nel codice

I commenti nel codice sono una pratica fondamentale per rendere i programmi più leggibili, comprensibili e manutenibili. Sebbene il computer ignori completamente i commenti durante l’esecuzione, essi svolgono un ruolo cruciale per i programmatori, aiutandoli a spiegare il funzionamento del codice e a facilitarne la comprensione in futuro.

1. Rendere il codice più comprensibile

I commenti descrivono il funzionamento delle istruzioni e permettono di capire a colpo d’occhio cosa fa il codice.

Esempio:

1// Imposta la finestra a 400x400 pixel
2size(400, 400);
3 
4// Imposta lo sfondo di colore grigio chiaro
5background(220);
6 
7// Disegna un cerchio blu al centro della finestra
8fill(0, 0, 255);
9ellipse(200, 200, 100, 100);

Senza commenti, i valori numerici potrebbero non essere immediatamente chiari per chi legge il codice.

2. Facilitare la collaborazione

Quando più persone lavorano sullo stesso progetto, i commenti aiutano a comprendere più velocemente il codice scritto da altri, evitando errori e fraintendimenti.

Esempio:

1size(400, 400);
2background(255); // Imposta lo sfondo a bianco
3 
4// Disegna tre cerchi con colori diversi e bordo nero
5stroke(0); // Contorno nero
6 
7fill(255, 0, 0, 150); // Rosso trasparente
8ellipse(100, 200, 100, 100);
9 
10fill(0, 255, 0, 150); // Verde trasparente
11ellipse(200, 200, 100, 100);
12 
13fill(0, 0, 255, 150); // Blu trasparente
14ellipse(300, 200, 100, 100);
15 
16/*
17   I tre cerchi hanno colori con trasparenza e si sovrappongono creando effetti di mescolanza.
18   Il contorno nero aiuta a evidenziare le forme.
19*/

In questo modo, chiunque collabori al codice capirà facilmente la logica dietro i cerchi colorati sovrapposti.

3. Debugging e test

I commenti permettono di disattivare temporaneamente parti di codice senza eliminarle, utile per testare e individuare errori.

Esempio:

1size(400, 400);
2background(255);
3 
4// fill(255, 0, 0); // Questa istruzione è temporaneamente disattivata
5ellipse(200, 200, 100, 100);

Se il colore di riempimento non funziona come previsto, possiamo riattivarlo rimuovendo il //.

4. Documentare codice complesso

Alcune parti di codice possono essere difficili da comprendere a colpo d’occhio. I commenti aiutano a spiegare passaggi complessi o calcoli particolari.

Esempio:

1size(400, 400);
2background(240); // Sfondo grigio chiaro
3 
4// Impostiamo il colore dei rettangoli e il contorno nero
5stroke(0);
6fill(255, 165, 0, 180); // Arancione semi-trasparente
7rect(100, 100, 120, 80);
8 
9// Disegniamo un secondo rettangolo con lo stesso centro ma con rectMode(CENTER)
10rectMode(CENTER);
11fill(0, 255, 255, 150); // Ciano semi-trasparente
12rect(200, 100, 120, 80);
13 
14/*
15   Questo codice disegna due rettangoli con colori semi-trasparenti.
16   Il primo rettangolo è disegnato con il punto di origine in alto a sinistra.
17   Il secondo utilizza rectMode(CENTER), quindi il centro è fissato nelle coordinate indicate.
18   Il risultato è una sovrapposizione che mostra la differenza tra i due metodi.
19*/

Con i commenti, il funzionamento del codice risulta chiaro senza dover interpretare ogni dettaglio.

5. Tipologie di Commenti in Processing

Processing permette due tipi di commenti:

  1. Commenti su una sola riga: si usano // per spiegare un’istruzione specifica.
1// Imposta lo sfondo a bianco
2background(255);
  1. Commenti su più righe: si usano /* */ per descrivere parti più lunghe del codice.
1/*
2   Questo programma genera una griglia di cerchi colorati con colori casuali.
3   Ogni cerchio ha una posizione generata casualmente sulla finestra.
4*/

Usare i commenti in modo efficace aiuta a scrivere codice più chiaro, leggibile e manutenibile. Sono essenziali per documentare il codice, facilitare la collaborazione e risolvere eventuali problemi senza perdere informazioni preziose.

Buona pratica: Inserite sempre commenti utili, ma senza esagerare: un codice troppo commentato può diventare confusionario.

Esercizio: Creare un Quadro in Stile Piet Mondrian

Obiettivo dell’esercizio

L’obiettivo di questo esercizio è riprodurre una composizione ispirata a Piet Mondrian, l’artista noto per i suoi dipinti astratti caratterizzati da rettangoli colorati separati da spesse linee nere.
Utilizzeremo Processing per realizzare la griglia di rettangoli colorati, rispettando una caratteristica importante: tutte le linee nere devono avere lo stesso spessore, incluse quelle che formano il bordo della finestra.

Concetti chiave

  • Uso della funzione rect() per disegnare rettangoli
  • Impostazione del colore di riempimento con fill()
  • Creazione delle separazioni nere con strokeWeight() e stroke()
  • Disegno del bordo nero attorno alla composizione

Struttura dell’esercizio

  1. Impostare la finestra con dimensione adeguata size(700, 500);
  2. Disegnare il fondo nero per creare le divisioni tra i rettangoli.
  3. Disegnare i rettangoli colorati e bianchi con fill().
  4. Mantenere sempre le separazioni nere di 10 pixel, incluso il bordo della composizione.
1size(700, 500); // Dimensione finestra
2 
3background(255); //Sfondo finestra bianco
4 
5stroke(0); // Bordo nero
6strokeWeight(10);  // Spessore bordo 10
7                   // il bordo è posizionato sul perimetro del rettangolo
8 
9fill(255); // Riempimento rettangolo bianco
10rect(5, 5, 150, 100);
11 
12fill(0, 0, 255); // Riempimento rettangolo blu
13rect(155, 5, 350, 100);
14 
15fill(255, 0, 0); // Riempimento rettangolo rosso
16rect(505, 5, 190, 100);
17 
18fill(255); // Riempimento bianco
19rect(5, 260, 150, 235);
20 
21fill(255, 255, 0); // Riempimento rettangolo giallo
22rect(5, 105, 150, 250);
23 
24fill(255); // Riempimento rettangolo bianco
25rect(155, 105, 250, 150);
26 
27fill(255, 255, 0); // Riempimento rettangolo giallo
28rect(375, 105, 200, 150);
29 
30fill(0, 0, 255); // Riempimento rettangolo blu
31rect(575, 105, 120, 250);
32 
33fill(255, 0, 0); // Riempimento rettangolo rosso
34rect(155, 255, 120, 240);
35 
36fill(0, 0, 255); // Riempimento rettangolo blu
37rect(275, 255, 190, 100);
38 
39fill(255, 255, 0); // Riempimento rettangolo giallo
40rect(275, 355, 420, 140);

Esercizio: modifica i colori, le proporzioni e sperimenta con nuove disposizioni!

Un passo in più 🙂

L’Importanza dei Numeri Casuali in Programmazione

Anticipiamo il concetto di generazione di numeri casuali presente in qualsiasi linguaggio di programmazione e mostriamo come questo può essere utilizzato per sviluppare un’attività interessante che va a modificare l’esercizio precedente.

I numeri casuali svolgono un ruolo fondamentale nei linguaggi di programmazione, poiché permettono di introdurre variabilità e imprevedibilità nei programmi. Sono utilizzati in numerosi ambiti, tra cui:

  • Grafica generativa e arte digitale – Creare disegni, pattern e animazioni che cambiano in modo dinamico.
  • Giochi e simulazioni – Generare movimenti casuali, comportamenti imprevedibili o scenari di gioco sempre diversi.
  • Crittografia e sicurezza – Proteggere dati attraverso chiavi e algoritmi crittografici basati su numeri casuali.
  • Intelligenza artificiale e apprendimento automatico – Inizializzare reti neurali e introdurre casualità nelle simulazioni.

L’utilizzo di funzioni per generare numeri casuali, come random() in Processing, consente di arricchire l’interattività dei programmi e di creare esperienze uniche a ogni esecuzione.

La funzione random()

Genera numeri casuali. Ogni volta che la funzione random() viene chiamata, restituisce un valore imprevedibile all’interno dell’intervallo specificato.

Se viene passato un solo parametro alla funzione, essa restituirà un valore in virgola mobile compreso tra zero e il valore del parametro massimo. Ad esempio, random(5) restituisce valori compresi tra 0 e 5 (a partire da zero fino a, ma senza includere, 5).

Se vengono specificati due parametri, la funzione restituirà un valore in virgola mobile compreso tra i due valori indicati. Ad esempio, random(-5, 10.2) genera numeri casuali a partire da -5 fino a (ma senza includere) 10.2.

Per convertire un numero casuale in virgola mobile in un numero intero, è possibile utilizzare la funzione int().

Esperimento: creare un quadro in stile Piet Mondrian con colori di riempimento casuali ad ogni riavvio del programma

Sulla base dellultimo esercizio inseriamo all’interno di ogni istruzione fill() al posto del valore 255 random(255) in modo che il riempimento avvenga con un colore casuale compreso tra 0 e 254.

1size(700, 500); // Dimensione finestra
2 
3background(255); //Sfondo finestra bianco
4 
5stroke(0); // Bordo nero
6strokeWeight(10);  // Spessore bordo 10
7                   // il bordo è posizionato sul perimetro del rettangolo
8 
9fill(random(255)); // Riempimento rettangolo in una tonalità di grigio
10rect(5, 5, 150, 100);
11 
12fill(0, 0, random(255)); // Riempimento rettangolo in una tonalità di blu
13rect(155, 5, 350, 100);
14 
15fill(random(255), 0, 0); // Riempimento rettangolo in una tonalità di rosso
16rect(505, 5, 190, 100);
17 
18fill(random(255)); // Riempimento in una tonalità di grigio
19rect(5, 260, 150, 235);
20 
21fill(random(255), random(255), 0); // Riempimento rettangolo in una tonalità di giallo
22rect(5, 105, 150, 250);
23 
24fill(random(255)); // Riempimento rettangolo in una tonalità di grigio
25rect(155, 105, 250, 150);
26 
27fill(random(255), random(255), 0); // Riempimento rettangolo in una tonalità di giallo
28rect(375, 105, 200, 150);
29 
30fill(0, 0, random(255)); // Riempimento rettangolo in una tonalità di blu
31rect(575, 105, 120, 250);
32 
33fill(random(255), 0, 0); // Riempimento rettangolo in una tonalità di rosso
34rect(155, 255, 120, 240);
35 
36fill(0, 0, random(255)); // Riempimento rettangolo in una tonalità di blu
37rect(275, 255, 190, 100);
38 
39fill(random(255), random(255), 0); // Riempimento rettangolo in una tonalità di giallo
40rect(275, 355, 420, 140);

Buon Coding a tutti 🙂

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.