Capitolo 1 bis - array

// 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);
}