らせん
マウスのx座標により、らせんが成長します。 らせんを描くプログラムは【問題2-3】で作りました。半径rの円を描く場合、円上の点のx、y座標の計算式は次のようになります。tは時計の3時の位置を0度とした時計回りの角度(度単位)です。
x = r * cos(radians(t)); y = r * sin(radians(t));らせんは円と違い、rの値が一定ではありません。角度tが変化するに従って、a * radians(t) のように変化します。aは係数で、この値を大きくすると、らせんの広がりが大きくなります。らせん上の点の座標を表す式は次のようになります。下のプログラムでは係数aを2.0にしています。
x = a * radians(t) * cos(radians(t)); y = a * radians(t) * sin(radians(t));これはらせんの中央を座標の原点(0,0)にしたときの計算式です。
らせんの中心を画面の中央に置くため、画面の中央の位置のx座標、y座標の値を加えています。
x = a * radians(t) * cos(radians(t)) + width/2; y = a * radians(t) * sin(radians(t)) + height/2;らせん上の点の位置を表す角度tは、らせんを一周すると0度から360度に変化し、二周めで360度から720度に変化します。下の例ではマウスが画面の左端から右端に移動する間にらせんを8周させています。
t = map(i, 0, wide, 0, 360*8);iの値は0からマウスのx座標まで変化し、その値を0度から8周分の角度の間に割り付けて(マップして)います。
計算されたx、y座標の点を曲線でつなげて線を描くためにcurveVertex()関数を使っています。
【リストSpiral】
float x,y,t;
float a = 2.0;
int wide=150; // 画面の高さ
void setup() {
size(wide, wide); //描画するための画面
strokeWeight(3);
}
void draw() {
background(255);
beginShape();
for(int i=0; i<=mouseX; i++){
t = map(i, 0, wide, 0, 360*8);
x = a * radians(t) * cos(radians(t)) + width/2;
y = a * radians(t) * sin(radians(t)) + height/2;
curveVertex(x,y);
}
endShape();
}