自由運動

 パーティクルのようなものを最終目標に、初めの一歩としてたくさんのオブジェクトを描画する処理を作っていきます。

雛形

 クラスで物体を作って、初期化、フレームごとの呼出をするための雛形は下のようになると思います。
Obj[] obj = new Obj[n];
void setup(){
  for(int i = 0; i < obj.length; i++){
    obj[i] = new Obj();
  }
}
void draw(){
  for(int i = 0; i < obj.length; i++){
    obj[i].action();
  }
}
class Obj{
  Obj(){
    //初期化
  }
  void action(){
    //動作
  }
}
 クラスや配列は私が説明しない方がいいと思いますので割愛します。
 骨組みは簡単なので理解するといろいろ試したくなると思いますので、トライ&エラーで遊んでみてください。

 試しに下のようなオブジェクトを作ってみました。
class Obj{
  int px, py, vx, vy, c, r;
  Obj(){
    //初期化
    px = random(width);
    py = random(height);
    vx = random(-5, 5); vy = random(-5, 5);
    c = random(200);
    r = random(10, 20);
  }
  void action(){
    //動作
    px += vx; py += vy;
    if (px < 0){px = 0; vx *= -1;}
    if (px > width){px = width; vx *= -1;}
    if (py < 0){py = 0; vy *= -1;}
    if (py > height){py = height; vy *= -1;}
    noStroke();
    fill(c, 200);
    ellipse(px, py, r, r);
  }
}

<moveA.pde>


 ぼーっと眺めていると癒されるような気がしますが、あと2手打ちたいと思います。

速度変化

 上の例では速度に変化がないので、落ち着きますが、単調です。
 速度に変化を加えて『有機的』な感じを持たせたいと思います。
  //動作
    vx += random(-1, 1); vy += random(-1, 1);//追加
    px += vx; py += vy;
    if (px < 0){px = 0; vx *= -0.75;}//修正
    if (px > width){px = width; vx *= -0.75;}//修正
    if (py < 0){py = 0; vy *= -0.75;}//修正
    if (py > height){py = height; vy *= -0.75;}//修正
    noStroke();

<moveB.pde>

 速度に乱数を加減する処理を加えています。
 壁と衝突した際に速度を落としています。これがないと速度が上がり続けて大変なことになる場合があります。

衝突

 これは幾度も挫折した処理です。
 検索したら答えだけでなく、そこにいたる過程も丁寧に説明されているサイトにめぐり合えたので、勉強して、別項で試してみたいと思います。