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

一方向のらせん運動…異なる大きさの円の列

サイズの異なる複数の円が列になって、対数らせん上を運動します。動きは、同一円列と同じで、異なる点は、円のサイズを入れておく配列dを使うところです。サイズの変化量を小数点数とするので、配列のデータ型はfloatとします。
float d[] = new float[10]; // 円の直径
setup()関数の中で、円の大きさの配列dを初期化します。最初の円d[0]は2とし、2ずつ大きくします。
  d[0] = 2; //列の先頭の円の直径
  for(int i=1;i<angle.length;i++){
    angle[i] = angle[i-1] - 25;
    d[i]= d[i-1] + 2 ; // 円のサイズは2ずつ大きくする
  }
 }
配列dの値を、描画の時に使います。

Your browser does not support the canvas tag.

クリックで停止⇔再開
【リスト SpiralM3】
float angle[]  = new float[10]; // 位置(角度)
float da = 5; // 角度の変化量
float x,y;
float a = 5;   //らせんの巻き方、大きいと早く広がる
float b = 0.12;   //らせんの巻き方、大きいと早く広がる
float d[] = new float[10]; // 円の直径

void setup() {
  size(150, 150);   //描画するための画面
  fill(0);
  d[0] = 2; //列の先頭の円の直径
  for(int i=1;i<angle.length;i++){
     angle[i] = angle[i-1] - 25;
     d[i]= d[i-1] + 2 ;
  }
}

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]);

      if (angle[i]>360*5) { //画面から消えるほど広がった
        angle[i]=-5;
      } else {
        angle[i] = angle[i] + da;
      }
   }
}

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