一方向運動リストに戻る    印刷する

一方向の円運動…円の列(サイズ変化)

一方向の円運動…ひとつ(大きさ変化)と同様、円周上を2周する間に、円の大きさが増加減少します。

10個の円の円周上での位置(角度)を入れておく配列angle、円のサイズを入れておく配列dを使います。 配列を定義し、
 float angle[]  = new float[10]; // 位置(角度)
 float d[] = new float[10]; // 円の直径
setup()関数の中で、配列angleの値を0, -20, -40, -60,,,と初期化します。円のサイズの初期値はすべて1としました。
 for(int i=0;i<angle.length;i++){
    angle[i] =  (-20) * i; // angle[i-1] - 20としても同じ。
    d[i]= 1;
  }
draw()関数内のfor文での処理は、配列を使う以外は、ひとつ(大きさ変化)と同じです。

Your browser does not support the canvas tag.

クリックで停止⇔再開
【リスト CircleM4】
float angle[]  = new float[10]; // 位置(角度)
float da = 2; // 角度の変化量
float x, y;
float len = 60; // 軌跡の円の半径
float d[] = new float[10]; // 円の直径
float dd=0.3;  //直径の増加量

void setup() {
  size(150, 150);   //描画するための画面
  fill(0);
  for(int i=0;i<angle.length;i++){
    angle[i] =  (-20) * i;
    d[i]= 1;
  }
}

void draw() { 
     background(255);   //画面の背景を白でクリア
     for(int i=0; i<angle.length; i++){
        x =len * cos(radians(angle[i])) + width/2.0;
        y =len * sin(radians(angle[i])) + height/2.0;
        ellipse(x, y, d[i],d[i]);
        if (angle[i] >720) { //1サイクル終わったら
           angle[i]= 0; //初期値に戻す
           d[i] = 1;
        } else {
           angle[i] = angle[i] + da;
           if(angle[i] <360 && angle[i]>0) { d[i] = d[i]+dd; } // 0-360は増加
           else if(angle[i] >=360 && angle[i]<=720) { d[i] = d[i]-dd; } // 360-720は減少
        }
     }
}

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