-
Dildo bike simulator, vol. I
1Scritto il 18 luglio 2009 in Ffruustration, Lols, Low techTempo fa avevo accennato ad un po’ di cazzate che mi divertii a fare con Python e matplotlib, per la serie “facciamo a meno di scilab”. Devo ammettere che non avendo la minima idea di dove mettere le mani per fare un qualche tipo di “intero a risoluzione infinita” e qualsiasi altro complicato algoritmo numerico da informatico, beh, Python fornisce un’ottima alternativa alla pigrizia.

L’idea momentanea era la seguente: siccome è ridicolo vedere uno sproposito di programmini in java per simulazioni numeriche ( con qualche bel disegnino, magari ), perché non farne uno in un linguaggio che non faccia vomitare ? Dopotutto non deve essere troppo difficile.
Sembrano anche esserci degli esempi funzionanti su Internet. Provando quel programmino insospettisce un po’ che senza un minimo di sleep l’animazione di una sinusoide che va avanti indietro risulti così fluida – e neppure troppo; dopotutto qualsiasi programma OpenGL banale richiede un refresh sincronizzato con la complessità del disegno; per disegnare qualcosa di stupido almeno quanto una svastica rotante ( di circa un grado per frame ) ci vuole un refresh dell’ordine del ms, per la cronaca.
La maestosa inculata è che a quanto pare matplotlib non è fatta per animazioni “complesse”, ma a quanto pare nemmeno per animazioni semplici. Certo, i grafici sono carini, ma forse conviene evitare qualsiasi cosa si muova. In effetti ho anche pensato che fosse un problema di backend, ma data la pigrizia non ho voglia di sbattermi a cercarne uno decente1.
Dunque, il problema è – se ne vedon tanti2 – fare un coso che simuli un ferromagnete di Ising in due dimensioni. La soluzione è calzata in un centinaio di righe di C, per quanto riguarda il solo scheletro. Per ora l’unica funzione che lavora fa questo:
void fill (int **M, int n)
{
int N, i, j;
char k;
int fd = open ("/dev/urandom", O_RDONLY);
float d = 2 / (float) n;
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f (1.0f, 1.0f, 1.0f);
glBegin (GL_QUADS);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
read (fd, &k, 1);
N = (int) k;
M[i][j] = N % 2 ? 1 : 0;
if (M[i][j] == 1) {
glVertex3f (-1 + d*j, 1 - d*i, 0.0);
glVertex3f (-1 + d*(j+1), 1 - d*i, 0.0);
glVertex3f (-1 + d*(j+1), 1 - d*(i+1), 0.0);
glVertex3f (-1 + d*j, 1 - d*(i+1), 0.0);
}
}
}
glEnd ();
close (fd);
}Ovvero, “riempi a caso in bianco e nero”. Quando capirò come far interagire gli spin probabilmente la cosa si farà più interessante, ma per ora ci si accontenta. In ogni caso non sembra avere grossi problemi di performance, nemmeno con una matrice 100 x 100.
Sempre in tema OpenGL, avevo in mente di fare anche una versione di Pong e una di Tron ma penso che rimanderò.
In realtà era tutta una scusa per testare il plugin che colora la sintassi, ma dopotutto, dopo Michael Jackson e il papa che bestemmia dopo essersi rotto la mano, beh, le notizie sono finite da un pezzo.
_______________- compito per casa per chiunque usi Linux/*BSD: provate questo programmino, magari funziona in modo dignitoso
- questo è un esempio, fatto molto bene, fra l’altro
1 Trackbacks / Pingbacks
-
[...] a happy seppuku – Dildo bike simulator, vol. II 1 28 agosto 2009Pubblicato in Low tech Tempo fa avevo iniziato un programmino che simulasse un ferromagnete di Ising in due dimensioni. Ho avuto [...]

seppuku » Blog Archive » Have a happy seppuku – Dildo bike simulator, vol. II agosto 28th, 2009 alle 18:34