Generalmente, crediamo che scrivere codice sia qualcosa che gli sviluppatori fanno per creare software che “serva a qualcosa”.
Ciò che intendo è che le persone credono che gli sviluppatori utilizzino le loro capacità logiche per scrivere programmi che possano servire a “scopi pratici” come:
- Automatizzare attività giornaliere.
- Creare bellissimi frontends.
- Creare programmi per sistemi di pagamento.
- Realizzare videogiochi.
Tanto per nominarne solo alcuni.
Anche se alcuni sviluppatori credono di essere degli artisti (scrivere codice pulito non è una vera e propria arte???), la verità è che esiste un movimento che si sforza di realizzare veri e propri pezzi creativi fuori con il codice.
Quindi, in questo articolo, parleremo di creative coding e faremo alcuni esempi in Python.
Cos’è il creative coding?
Il creative coding è una pratica che prevede di utilizzare i linguaggi di programmazione per creare arte, design o altre forme di espressione artistica e creativa, visivamente accattivanti, e talvolta anche interattive.
A differenza del coding tradizionale – che si concentra principalmente su scopi funzionali o utilitaristici, come abbiamo detto prima – il creative coding enfatizza gli aspetti estetici e artistici della programmazione.
In particolare, implica sperimentare con il codice per generare risultati stimolanti, spingendo la ricerca fino ai confini tra tecnologia e arte.
Facciamo, però, subito chiarezza specificando che questo processo non coinvolge l’AI generativa.
Sappiamo, infatti, che grazie all’intelligenza artificiale generativa possiamo scrivere prompt e, poi, un modello di Deep Learning creerà un’immagine dal prompt, utilizzando il codice.
Questo non è ciò che intendiamo quando parliamo di creazione d’arte graie al codice.
Ciò che intendiamo è che il codice viene utilizato per generare direttamente, e senza l’uso di modelli di intelligenza artificiale, un output che può essere inteso come un’opera d’arte.
Lettura consigliata: Gemini AI vs ChatGPT: qual è il migliore?
Esempi di creative coding in Python
Dato che Python è uno dei linguaggi di programmazione più utilizzati, può essere impiegato anche per scopi legati al creative coding.
In precedenza abbiamo parlato della creazione di qualcosa che possa essere considerato arte in quanto risultato del codice.
Poiché molte attività sono considerate arte, di seguito forniremo alcuni esempi di ciò che riteniamo possano essere opere d’arte.
Creative coding: scrivere storie e favole in Python
La poesia, la narrazione e le fiabe sono tutte forme d’arte.
La domanda è: potremmo usare Python per creare una favola, magari guidando i lettori nella scelta tra alcune possibili risposte, per renderla interattiva?
Certo che potremmo!
Ecco un esempio:
import time
def intro():
print("Welcome to the Adventure in the Enchanted Forest!")
time.sleep(1)
print("You find yourself at the entrance of a mysterious forest.")
time.sleep(1)
print("Your goal is to reach the magical clearing at the center.")
time.sleep(1)
print("Let the adventure begin!\n")
def choose_path():
print("You stand at a crossroads. Do you go left or right?")
choice = input().lower()
if choice == "left":
print("\nYou venture deeper into the forest.")
time.sleep(1)
encounter_wild_animal()
elif choice == "right":
print("\nYou follow a narrow path.")
time.sleep(1)
encounter_old_bridge()
else:
print("Invalid choice. Try again.")
choose_path()
def encounter_wild_animal():
print("\nAs you walk through the dense foliage, you encounter a wild animal.")
time.sleep(1)
print("It's a friendly fox! What do you do?")
time.sleep(1)
print("1. Approach the fox slowly.")
print("2. Stay still and observe from a distance.")
print("3. Run away in fear.")
choice = input()
if choice == "1":
print("\nThe fox approaches you and guides you through a hidden shortcut.")
time.sleep(1)
reach_magical_clearing()
elif choice == "2":
print("\nThe fox acknowledges your respect and disappears into the forest.")
time.sleep(1)
choose_path()
elif choice == "3":
print("\nThe animal is startled, and you trip over a tree root while running.")
time.sleep(1)
print("You find yourself back at the crossroads.")
time.sleep(1)
choose_path()
else:
print("Invalid choice. Try again.")
encounter_wild_animal()
def encounter_old_bridge():
print("\nYou reach an old, creaky bridge over a rushing river.")
time.sleep(1)
print("What will you do?")
time.sleep(1)
print("1. Cross the bridge cautiously.")
print("2. Look for another way around.")
print("3. Yell for help.")
choice = input()
if choice == "1":
print("\nYou carefully cross the bridge and continue your journey.")
time.sleep(1)
choose_path()
elif choice == "2":
print("\nYou explore the area and find a hidden path that leads to a mystical cave.")
time.sleep(1)
explore_mystical_cave()
elif choice == "3":
print("\nYour yell echoes through the forest, but no one responds.")
time.sleep(1)
print("You decide to cross the bridge quietly.")
time.sleep(1)
choose_path()
else:
print("Invalid choice. Try again.")
encounter_old_bridge()
def explore_mystical_cave():
print("\nYou enter the mystical cave and discover glowing crystals.")
time.sleep(1)
print("What do you want to do?")
time.sleep(1)
print("1. Collect some crystals.")
print("2. Leave the cave and continue your journey.")
choice = input()
if choice == "1":
print("\nYou carefully collect a few crystals, feeling their magical energy.")
time.sleep(1)
reach_magical_clearing()
elif choice == "2":
print("\nYou decide to leave the cave and continue your adventure.")
time.sleep(1)
choose_path()
else:
print("Invalid choice. Try again.")
explore_mystical_cave()
def reach_magical_clearing():
print("\nCongratulations! You reach the magical clearing at the center of the forest.")
time.sleep(1)
print("The clearing is bathed in a soft, otherworldly light.")
time.sleep(1)
print("You've completed your adventure in the enchanted forest. Well done!")
# Start the adventure
intro()
choose_path()
Code language: PHP (php)
Ecco un’immagine che mostra come funziona il programma:
Gli utenti seguono, quindi, un percorso narrativo che cambia a seconda della risposta che inseriscono, fino ad arrivare alla fine del racconto.
Poiché la poesia e i racconti sono un’opera d’arte, questo è un esempio di opera d’arte interattiva.
Infatti, dato che la Command Line Interface permette agli utenti di interagire con un programma, abbiamo creato una storia che viene in qualche modo modellata sulla base delle risposte scelte dal lettore.
Lettura consigliata: Come sviluppare il tuo Chatbot con Python e ChatterBot partendo da zero
Creative coding: utilizzare la matematica per creare opere d’arte
Ci sono molte persone (e io sono tra quelle!) che credono che la matematica sia in qualche modo un’arte.
Quindi, perché non realizzare creazioni artistiche utilizzando la matematica?
Ad esempio, sapevi che in matematica esiste una funzione chiamata “cardioide” che crea la forma del cuore?
Ecco come possiamo creare un cardioide in Python:
import numpy as np
import matplotlib.pyplot as plt
def create_cardioid():
'''Creates the cardioid'''
# Define radious (r) and angle (theta)
theta = np.linspace(0, 2*np.pi, 1000)
r = 1 - np.sin(theta)
# Give carthesian coordinates
x = r * np.cos(theta)
y = r * np.sin(theta)
return x, y
def plot_cardioid(x, y):
'''Plots the cardioid'''
fig, ax = plt.subplots()
# Plot the cardioid
ax.plot(x, y, label='Cardioid', color='blue')
# Fill the inside of the cardioid in red
ax.fill(x, y, color='red', alpha=0.5)
# Set the aspect ratio to be equal
ax.set_aspect('equal', adjustable='datalim')
# Set axis labels
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
# Set the title
ax.set_title('Cardioid with Coloring')
# Display the legend
ax.legend()
# Show the plot
plt.show()
if __name__ == "__main__":
x, y = create_cardioid()
plot_cardioid(x, y)
Code language: PHP (php)
Otteniamo:
Possiamo fare molto meglio che creare un cardioide, però.
Per esempio, possiamo utilizzare la libreria matplotlib per creare un disegno artistico utilizzando forme matematiche come i cerchi:
import numpy as np
import matplotlib.pyplot as plt
def generate_art(num_circles=100):
fig, ax = plt.subplots()
for _ in range(num_circles):
# Randomly generate circle parameters
radius = np.random.uniform(0.1, 0.5)
x_center = np.random.uniform(0, 1)
y_center = np.random.uniform(0, 1)
color = np.random.rand(3,) # RGB values between 0 and 1
# Plot the circle
circle = plt.Circle((x_center, y_center), radius, color=color, alpha=0.7)
ax.add_patch(circle)
# Set the aspect ratio to be equal
ax.set_aspect('equal', adjustable='datalim')
# Set axis labels
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
# Set the title
ax.set_title('Circles - Generative Art')
# Show the plot
plt.show()
if __name__ == "__main__":
generate_art()
Code language: PHP (php)
Questo è quello che ho ottenuto io:
Si noti che, poiché i cerchi vengono creati in modo casuale nel programma che abbiamo scritto in Python, si ottiene un risultato diverso ogni volta che eseguiamo il programma.
Ora, cos’altro potremmo fare? Ebbene, le spirali, abbinate a colori psichedelici, vengono spesso utilizzate per creazioni artistiche.
Ecco come possiamo creare una spirale con colori psichedelici in Python:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
def draw_psychedelic_spiral(num_spirals=10, num_points=1000):
fig, ax = plt.subplots()
for _ in range(num_spirals):
# Generate points for the spiral
theta = np.linspace(0, 10 * np.pi, num_points)
radius = np.linspace(0, 1, num_points)
# Convert polar coordinates to Cartesian coordinates
x = radius * np.cos(theta)
y = radius * np.sin(theta)
# Define psychedelic colors using the 'hsv' colormap
colors = cm.hsv(np.linspace(0, 1, num_points))
# Plot the spiral with psychedelic colors
for i in range(num_points - 1):
ax.plot([x[i], x[i+1]], [y[i], y[i+1]], color=colors[i], linewidth=2, alpha=0.7)
# Set the aspect ratio to be equal
ax.set_aspect('equal', adjustable='datalim')
# Set axis labels
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
# Set the title
ax.set_title('Psychedelic Spirals')
# Show the plot
plt.show()
if __name__ == "__main__":
draw_psychedelic_spiral()
Code language: PHP (php)
E si ottiene:
Creative coding: la libreria Turtle
Python ha un modulo integrato chiamato turtle che fornisce la possibilità di introdurre i concetti di programmazione ai principianti attraverso grafica e animazione.
Questo modulo consente agli utenti di disegnare forme e trame e persino di creare semplici giochi utilizzando la finestra grafica di turtle .
Ecco come possiamo usare turtle per creare alcuni cerchi artistici:
import turtle
import random
turtle.speed(0)
turtle.bgcolor("black")
# Function to draw colorful circles
def draw_circles():
for _ in range(100):
turtle.color(random.random(), random.random(), random.random())
turtle.forward(100)
turtle.right(45)
# Create multiple circles
for _ in range(10):
draw_circles()
turtle.done()
Code language: CSS (css)
E si ottiene la seguente immagine:
Tieni presente che, poiché si tratta di una libreria integrata, una volta eseguito il codice si aprirà una nuova finestra come questa, che mostra i risultati del tuo codice.
Questo modulo, quindi, può essere utilizzato anche per creare immagini animate, migliorando l’esperienza artistica.
Conclusioni
In questo articolo abbiamo dimostrato che la codifica non è diretta solo verso software che può avere “scopi di produzione”.
Ci sono molte persone che si sforzano di creare creazioni artistiche partendo dal codice e, poiché l’arte non ha limiti, l’unico limite che hai è la tua fantasia.