一方向のらせん運動…異なる大きさの円の列
サイズの異なる複数の円が列になって、対数らせん上を運動します。動きは、同一円列と同じで、異なる点は、円のサイズを入れておく配列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の値を、描画の時に使います。
クリックで停止⇔再開
【リスト 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; } } }