一方向の円運動…円の列(サイズ変化)
一方向の円運動…ひとつ(大きさ変化)と同様、円周上を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文での処理は、配列を使う以外は、ひとつ(大きさ変化)と同じです。
クリックで停止⇔再開
【リスト 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は減少 } } }