振動運動リストに戻る    印刷する

うごめく円…複数の円

一定の範囲内でランダムに振動する円が格子状に並んでいます。
ひとつの震える円で使ったクラスVibateBallのオブジェクトを64個(8行×8列)作り、配列vbの中に入れています。
円の中心の位置の間隔は、d+k(直径+円の間隔)で、最初の位置は10です。円の座標は次のようになります。

1行目: (10, 10)                    (10+(d+k), 10)                    (10+(d+k)+(d+k), 10)
2行目: (10, 10+(d+k))            (10+(d+k), 10+(d+k))            (10+(d+k)+(d+k), 10+(d+k))
3行目: (10, 10+(d+k)+(d+k))    (10+(d+k), 10+(d+k)+(d+k))    (10+(d+k)+(d+k), 10+(d+k)+(d+k))

一般化すると、i行j列のx、y座標は、(10+(d+k)*j, 10+(d+k)*i)と書けます。
このx座標、y座標の値を指定して、VibrateBallオブジェクトを生成します。 setup()関数内の二重のfor文で、8行×8列の64個の円を配列vbの中に順番に入れます。nは配列のインデックスで、nが0~7に一行目の円が入り、nが8から15に二行目の円が入ります。
vb = new VibrateBall[row*col];  //配列の要素の数は64(8x8)
int n=0;
for(int i=0; i<row; i++){ // i行目の円
   for(int j=0; j<col; j++){ // j列目の円
      vb[n] = new VibrateBall(10+(d+k)*j, 10+(d+k)*i, wide, v, d);
      n++;                // ↑円のx座標  ↑y座標
   }
}
そして、draw()関数の中で、VibateBallのメソッドdisplay()を呼び出し、新しい位置に描画します。
for(int i=0; i<vb.length; i++){ //配列中の円を順に描く
   vb[i].display();
}

Your browser does not support the canvas tag.

クリックで停止⇔再開
【リスト VibrateMany】
VibrateBall [] vb;  //円のオブジェクトを入れる配列
int v = 5; //移動速度の最大値
float x, y ; // 位置(座標)
int d = 8; // 円の直径
int wide = 3; //動く範囲幅
int k = 10;   //円の間隔
int row=8;
int col=8;

void setup() {
  size(150, 150);   //描画するための画面
  frameRate(30);    //フレームレート
  fill(0);
  vb = new VibrateBall[row*col];
  int n=0;
  for(int i=0; i<row; i++){ // i行目の円
     for(int j=0; j<col; j++){ // j列目の円
        vb[n] = new VibrateBall(10+(d+k)*j, 10+(d+k)*i, wide, v, d);
        n++;
     }
  }
}

void draw() { 
  background(255);   //画面の背景を白でクリア
  for(int i=0; i<vb.length; i++){ //配列中の円を順に描く
     vb[i].display();
  }
}

arigat アットマーク acm.org / copyright © info