うごめく円…複数の円
一定の範囲内でランダムに振動する円が格子状に並んでいます。ひとつの震える円で使ったクラス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(); }
クリックで停止⇔再開
【リスト 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(); } }