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

一方向のらせん運動…円の列(大きさ変化)

複数の円が列になって、サイズが増加しながら対数らせん上を運動します。 動きは、異なるサイズの円列と同じですが、個々の円の大きさが変化するところが違います。

運動する円の個数を変数numに保存しておき、配列の宣言には直接個数を指定せず、変数numを使うようにしました。個数を変えてテストするような場合、変更が1か所で済みます。
 int num = 20;
 int angle[]  = new int[num]; // 位置(角度)
 float d[] = new float[num]; // 円の直径

Your browser does not support the canvas tag.

クリックで停止⇔再開
【リスト 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;  //大きさ増加
      }
   }
}

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