一方向のらせん運動…異なる大きさの円の列
サイズの異なる複数の円が列になって、対数らせん上を運動します。動きは、同一円列と同じで、異なる点は、円のサイズを入れておく配列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;
}
}
}