Post recenti
Commenti recenti
- I Principali Test per un Sito Web in Ottica SEO - Ingegnerealbano.com on Come calcolare la distribuzione del “PageRank” tra le pagine di un sito
- SEO e keywords: esistono strategie e tecniche efficaci? | SERIAL EYE on Benedetta SEO, maledetta SEO
- LowLevel on Continuare a smontare Google: un’altra scoperta SEO
Tutti i post
-
Questa opera di Enrico Altavilla è concessa in licenza sotto la Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported.
Primi esperimenti 2D con Python
Sto approfittando di queste giornate di riposo e vacanza (più legata agli acciacchi che al periodo di fine anno) per mettere mano a Python.
Al di là della sua indubbia utilità come linguaggio di scripting per piccoli e veloci attività da automatizzare, la vera ragione che mi ha spinto a smanettarci in modo più serio è il desiderio di riprogrammare alcuni piccoli giocattoli grafici che avevo creato tanto tempo fa su altri sistemi operativi e con altri linguaggi.
Data l’indole a basso livello del sottoscritto, il primo esperimento che ho svolto è stato quello di allocare memoria in un buffer, usando un array multidimensionale, e scriverci dentro un po’ di informazioni RGB, trasformando poi il tutto in un’immagine (mi sarebbe piaciuto allocare memoria senza usare array o altre strutture dati, ma non so se con Python la cosa è fattibile).
Vi chiederete perché diavolo dovrei allocare memoria a basso livello o usare array per disegnare pixel e la risposta è che trovo il codice che ne risulta molto elegante. Per esempio, per disegnare un pixel alle coordinate x,y e col colore r,g,b, l’istruzione che uso è: data[y,x] = [r,g,b]
Io lo trovo semplice ed autoesplicativo.
Come primo risultato con questo linguaggio non mi posso proprio lamentare, sopratutto perché il prodotto finale straborda arcobaleni psichedelici in pieno periodo natalizio. Ecco dunque un esempio delle immagini ipercolorate che stanno venendo fuori da questi primi tentativi.
Di seguito trovate invece il codice dello script che produce l’immagine. Per lanciare lo script è necessario avere installato sul proprio PC sia Python sia i package SciPy e NumPy.
Se siete arrivati a leggere fino a questo punto ma non avete la minima idea di ciò di cui sto parlando, allora potete limitarvi a fissare l’ipnotica immagine colorata, lasciando quello che segue ai nerd.
import math import numpy as np import scipy.misc.pilutil as smp # Function that calculates the distance between two points def distance(x1,y1,x2,y2): return math.sqrt((x2-x1)**2 + (y2-y1)**2) # Set width and height of the image width=1024 height=768 # Set the coords of the point where blue component will be 100% cx = width/2 cy = height/2 # Calculates the maximum possible distance between cx,cy # and any other point on the image surface maxdistance = math.sqrt(max(width-cx, cx)**2 + max(height-cy, cy)**2) # Create the array/buffer data = np.zeros( (height,width,3), dtype=np.uint8 ) # Fill it with RGB values for y in range(height): for x in range(width): r = 255*x/width g = 255*y/height b = 255 - (255 * distance(x,y,cx,cy) / maxdistance) data[y,x] = [r,g,b] # Create the image and show it img = smp.toimage( data ) img.show()
Pingback: Insalate (colorate) di matematica - LowLevel’s blog
Pingback: Effetti pseudo 3D con matematica e Python - LowLevel’s blog