一方向のらせん運動…円の列(大きさ変化)
複数の円が列になって、サイズが増加しながら対数らせん上を運動します。 動きは、異なるサイズの円列と同じですが、個々の円の大きさが変化するところが違います。運動する円の個数を変数numに保存しておき、配列の宣言には直接個数を指定せず、変数numを使うようにしました。個数を変えてテストするような場合、変更が1か所で済みます。
int num = 20; int angle[] = new int[num]; // 位置(角度) float d[] = new float[num]; // 円の直径
クリックで停止⇔再開
【リスト SpiralM4】 int num = 20; float angle[] = new float[num]; // 位置(角度) float da = 5; // 角度の変化量 float x,y; float a = 10.0; //らせんの巻き方、大きいと早く広がる float b = 0.12; //らせんの巻き方、大きいと早く広がる float d[] = new float[num]; // 円の直径 float dd=0.2; //直径の増加量 void setup() { size(150, 150); //描画するための画面 fill(0); for(int i=0;i<angle.length;i++){ angle[i] = (-40) * i; d[i]= 1 ; } } void draw() { background(255); for(int i=0; i<angle.length; i++){ x = a * exp(radians(angle[i]*b)) * cos(radians(angle[i])) + width/2.0; y = a * exp(radians(angle[i]*b)) * sin(radians(angle[i])) + height/2.0; ellipse(x, y, d[i], d[i]); angle[i] = angle[i] + da; //角度増加 if (angle[i]>360*5) { //画面から消えるほど広がった angle[i] = -40; d[i] = 1; } else if(angle[i]>=0) { //画面上に登場しているなら d[i] = d[i]+dd; //大きさ増加 } } }