往復する円運動…異なるサイズの円列
大きさの異なる複数の円が列になって、円周上を往復運動します。 円周上の動きは、同一サイズの円列の円運動と同じです。それぞれの円の直径を保存する配列を用意し、円を描くときにその値を使うところだけが異なります。float[] d = new float[10]; // 円の直径 ....... ellipse(x, y, d[i], d[i]); }
クリックで停止⇔再開
【リスト RCircleM3】 float[] angle = new float[10]; // 位置(角度) float[] da = new float[10]; // 角度の変化量 float[] d = new float[10]; // 円の直径 float x, y; float len = 60; // 軌跡の円の半径 float ver=270; //往復位置の補正 角度 3時位置は0度、右回り void setup() { size(150, 150); //描画するための画面 fill(0); da[angle.length-1]=3; d[d.length-1] = 2; for(int i=angle.length-2;i>=0;i--){ angle[i]= angle[i+1] + 15; d[i] = d[i+1] +2; da[i] = 3; } } void draw() { background(255); //画面の背景を白でクリア for(int i=0; i<angle.length; i++){ angle[i] = angle[i] + da[i]; x = len * cos(radians(angle[i]+ver)) + width/2.0; y = len * sin(radians(angle[i]+ver)) + height/2.0; ellipse(x, y, d[i], d[i]); if (angle[i]>=360) { angle[i] = 360 - (angle[i]-360); //360を越えたとき360を越えた差分を折り返す da[i] = -da[i]; } else if (angle[i]<0) { angle[i] = - angle[i]; //0を越えたとき0を越えた差分を折り返す da[i] = -da[i]; } } }