// variabili globali
int N = 200;
float posx[];
float posy[];
float vx[];
float vy[];
int col[];
float d[];
float a;
float dt;
float t;
// istruzioni da eseguire una sola volta
void setup()
{
size(800, 600);
// creazione degli array
posx = new float [N];
posy = new float [N];
vx = new float [N];
vy = new float [N];
col = new int[N];
d = new float[N];
// valore dell'accelerazione
a = 0.1;
// inizializzazione degli array
for (int i = 0; i < N; i++)
{
posx[i] = 0;
posy[i] = 0;
vx[i] = random(0, 3);
vy[i] = random(-0.3, 1);
col[i] = int(random(255));
d[i] = random(5, 40);
}
// gestione del tempo
dt = 1.5;
t = 0;
}
void draw()
{
background(255);
for (int i = 0; i < N; i++)
{
// aggiornamento della velocitĂ
vy[i] = vy[i] + a * dt;
// aggiornamento della posizione
posx[i] = posx[i] + vx[i] * dt;
posy[i] = posy[i] + vy[i] * dt;
//////////////////////// gestione delle collisioni
// pavimento
if ((posy[i] + d[i]/2.0) > height)
{
vy[i] = -vy[i];
posy[i] = height - d[i]/2.0;
}
// parete destra
if ((posx[i] + d[i]/2.0) > width)
{
vx[i] = -vx[i];
posx[i] = width - d[i]/2.0;
}
// disegno
fill(col[i], 0, 0);
ellipse(posx[i], posy[i], d[i], d[i]);
}
t = t + dt; // avanza il tempo
fill(0);
textSize(20);
text("tempo: " + t, 20, 30);
}