KULT Underground

una della più "antiche" e-zine italiane – attiva dal 1994

Effetti Grafici

4 min read

Effetti Grafici

In questo numero di KULT vi propongo un programma in Turbo Pascal, facilmente traducibile in qualsiasi linguaggio, che mostra come, a livello di programmazione dilettantistica, si può giocare con la grafica e ottenere qualche risultato divertente.
Il programma di cui vi parlo è nel file HOPP.PAS che potete scaricare direttamente da KULT. HOPP non vuole certo creare animazioni spettacolari, ma solo “semplici” animazioni di punti e linee sullo schermo. Il sorgente non è molto ben commentato, perchè al momento della creazione doveva essere solo un passatempo. Tuttavia, con questo testo, non dovrebbe essere difficile.
L’idea alla base dell’animazione è descritta in questo breve algoritmo:

1) generare un vettore di punti con coordinate casuali e per ogni punto scegliere (sempre casualmente) anche un punto da raggiungere.
2) muovere ciascuno dei punti verso il suo punto da raggiungere
3) tracciare i punti sullo schermo
4) se un punto ha raggiunto la destinazione allora scegliere una nuova destinazione
5) tornare al passo 2

Detto così sembra un po’ stupido, però vi assicuro che con qualche accorgimento il risultato finale non è niente male.
Nel programma HOPP per prima cosa si è aggiunta la possibilità di interagire col programma tramite la tastiera, così il numero di punti
è aumentabile o diminuibile coi tasti “+” e “-“.
Un accorgimento, per rendere migliore l’animazione, sta nel considerare (in fase di tracciamento) i punti a due a due, così da tracciare linee invece che punti. Si è poi aggiunta la possibilità di passare da linee (staccate l’una dall’altra) ad una poligonale chiusa, premendo il tasto “spazio”. L’accorgimento più interessante, attivabile attraverso il tasto “invio”, è l’aggiunta della possibilità di far “implodere” la figura in un solo punto dello schermo o di farla
“esplodere”.

Alla base del programma c’è una routine che ha il compito di spostare un punto da una posizione (sx,sy) nello schermo ad un’altra posizione
(vx,vy). La routine in questione è “muovipunto” ed è su questa che si basano tutti i movimenti delle linee e, quindi, dell’animazione. Il movimento dei punti non è lineare, cioè non avviene con incrementi e decrementi costanti della posizione, ma è logaritmico, cioè avviene in questo modo:

(sx,sy) è volta per volta il punto di partenza, mentre (vx,vy) è il punto di arrivo.

sx = sx + (vx-sx)/10
sy = sy + (vy-sy)/10
alle coordinate di partenza aggiungo (o tolgo a seconda del segno di vx-sx) 1/10 del cammino che mi manca per raggiungere la destinazione.
In questo modo i punti sembrano partire velocemente e poi rallentare sempre più finchè non raggiungono il punto di destinazione. Per esempio, se sx=0 e vx=100 (per fare un caso semplice consideriamo di muoverci su una retta orizzontale, quindi non consideriamo sy) il punto occuperà progressivamente le seguenti posizioni:

sx=0+(100-0)/10 = 10
sx=10+(100-10)/10 = 19
sx=19+(100-19)/10 = 27.1
sx=27.1+(100-27.1)/10 = 34.39
.
.
.
sx=… = 100

Il valore 100 è raggiunto, in teoria, all’infinito in quanto ad sx sommo sempre valori più piccoli e non arrivo mai a vx se non asintoticamente, (per chi ha studiato un po’ di limiti e calcolo infinitesimale in matematica ciò è evidente).
Però, siccome il computer lavora con numeri finiti (anche se molto piccoli e molto grandi) e per evitare di impiegare troppo tempo per raggiungere il punto destinazione, si esegue un’operazione di arrotondamento nella fase di controllo, così che quando il valore sx arriva a 99.5 o poco più viene considerato come 100 e quindi il punto destinazione viene raggiunto.
Sempre nella routine “muovipunto” viene eseguita un’altra importante operazione: dopo il controllo sopracitato, in caso che il punto destinazione sia stato raggiunto, viene scelta la nuova destinazione.
La nuova destinazione viene scelta casualmente, ma, se si è premuto il tasto “invio”, la nuova destinazione da raggiungere diventa il punto successivo nel vettore di punti.
Ciò sembra una cosa inutile, ma provate un pochino ad utilizzare il programma e vi rendete conto che questo assegnamento è la cosa migliore del programma stesso, perchè è questo che genera l’implosione delle linee in un sol punto. Ripremendo “invio”, invece, l’assegnamento della nuova destinazione avviene casualmente e il grafico sembra “esplodere” da un sol punto ad un insieme di linee.
In HOPP è stato aggiunto anche un piccolo effettino sonoro legato alla posizione dei punti sullo schermo può essere disattivato (e riattivato) premendo il tasto “s”.
Ora, per concludere, non mi resta che darvi qualche consiglio su come utilizzare il programma HOPP per vedere qualcosa. Il numero di punti di partenza è 2 e quindi sullo schermo vedrete solo una linea, (che si muoverà molto velocemente, presumo), premete quindi un po’ di volte il tasto “+”, appariranno delle nuove linee (una ogni due pressioni del tasto), premte “invio” per vedere le linee collassare in un solo punto e, quindi premete di nuovo “invio” per far esplodere il punto.
Ora premete “spazio” e poi “invio”… ciò che si vede scopritelo da voi. Inoltre si possono fare un sacco di varianti, “smanettando” sulla routine “muovipunto” e sul tracciamento dei punti e vi invito a provarci.
Ciao.

Giulio Pons

Commenta