一方向のらせん運動…ひとつ(軌跡なし)
ひとつの円が、らせん上を運動します。 円周上点のx、y座標は、ひとつの円運動で見たように、次の式で計算できます。lenは円周の半径、angleは円周上の位置、widthとheightはそれぞれ画面の幅と高さです。x =len * cos(radians(angle)) + width/2.0; y =len * sin(radians(angle)) + height/2.0;円運動では、中心からの距離lenは固定ですが、らせんではこの値が変化し、その変化の仕方で、らせんの種類(例えば、アルキメデスらせん、対数らせんなど)が決まります。対数らせんは、巻貝や銀河のうずまきなど自然界のさまざまなところで見られます。その計算式は次のようになります。
x = a * exp(radians(angle)*b) * cos(radians(angle)) + width/2.0; y = a * exp(radians(angle)*b) * sin(radians(angle)) + height/2.0;a,bはらせんの広がりを決める係数で、数値が大きいと広がりが大きくなります。bが0の場合は半径aの円になります(aは必ず正値)。exp()は対数を計算するprocessingの関数です。
練習問題2-2では、半径lenに相当する値が一定で増加するアルキメデスのらせんを描きました。
クリックで停止⇔再開
【リスト Spiral1】 float angle; float da = 5; // 角度の変化量 float x,y; float a = 5.0; //らせんの巻き方、大きいと早く広がる float b = 0.12; //らせんの巻き方、大きいと早く広がる float d = 8; // 円の直径 void setup() { size(150, 150); //描画するための画面 fill(0); } void draw() { background(255); x = a * exp(radians(angle)*b) * cos(radians(angle)) + width/2.0; y = a * exp(radians(angle)*b) * sin(radians(angle)) + height/2.0; ellipse(x, y, d, d); if (x<0 && y<0) { //画面から消えるほど広がった angle=0; } else { angle = angle + da; } }