「変数」のページにあるプログラム
float cx=200; float cy=100; float r=50; beginShape();
vertex(cx + r * sin(radians( 0)), cy - r * cos(radians( 0))); vertex(cx + r * sin(radians( 72)), cy - r * cos(radians( 72))); vertex(cx + r * sin(radians(144)), cy - r * cos(radians(144))); vertex(cx + r * sin(radians(216)), cy - r * cos(radians(216))); vertex(cx + r * sin(radians(288)), cy - r * cos(radians(288)));
endShape();
であるが、vertexから始まる5行はとても似ていることに気づくだろう。それぞれの行は角度を0, 72, 144, 216, 288度に変えて同じ計算を行っている。 角度を表す変数 th を用いてこれを少し書き換えると、次のようになる。intは整数を表す型である。
float cx=200; float cy=100; float r=50; int th=0; beginShape();
vertex(cx + r * sin(radians(th)), cy - r * cos(radians(th))); th = th + 72; vertex(cx + r * sin(radians(th)), cy - r * cos(radians(th))); th = th + 72; vertex(cx + r * sin(radians(th)), cy - r * cos(radians(th))); th = th + 72; vertex(cx + r * sin(radians(th)), cy - r * cos(radians(th))); th = th + 72; vertex(cx + r * sin(radians(th)), cy - r * cos(radians(th))); th = th + 72;
endShape();
th = th + 72; はthの値を72だけ増やすことを表すので、これが実行されるたびに、thの値は0, 72, 144, 216, 288となり、最初のスケッチと同じ動作をすることがわかるだろう。
このスケッチを眺めると、全く同じ記述が5回繰り返されていることに気づく。こういった繰り返しを並べるのは、格好悪いし、間違いのもとである。Processingには、同じ動作を繰り返すための記述方法が用意されている。
float cx=200; float cy=100; float r=50; int th = 0; int i; beginShape();
for( i=0; i<5; i++ ){ vertex(cx + r * sin(radians(th)), cy - r * cos(radians(th))); th = th + 72; }
endShape();
ここで、for( i=0; i<5; i++ ){ } は、{ }の中のプログラムを5回繰り返して実行する。これをforループという。もう少し正確にいうと、まず、iに0が代入され、{ }の中のプログラムを実行し、i++でiの値を1だけ大きくする。そして、i<5が成り立たなくなったら繰り返しを終了する。 したがって、上のスケッチのfor...{ から }までの部分は、次の動作を行うのと同等である。
i=0; vertex(cx + r * sin(radians(th)), cy - r * cos(radians(th))); th = th + 72; i=1; vertex(cx + r * sin(radians(th)), cy - r * cos(radians(th))); th = th + 72; i=2; vertex(cx + r * sin(radians(th)), cy - r * cos(radians(th))); th = th + 72; i=3; vertex(cx + r * sin(radians(th)), cy - r * cos(radians(th))); th = th + 72; i=4; vertex(cx + r * sin(radians(th)), cy - r * cos(radians(th))); th = th + 72; i=5;
このiの値も計算に用いることができる。thはi*72と表されるので、もう少し簡潔に書くことができる。
float cx=200; float cy=100; float r=50; beginShape();
for( int i=0; i<5; i++ ){ vertex(cx + r * sin(radians(i*72)), cy - r * cos(radians(i*72))); }
endShape();
Forループは2つ以上入れ子にして用いることができる。
int i, j; size( 400, 200 ); for( i=1; i<=19; i++ ){
for( j=1; j<=9; j++ ){ circle( i*20, j*20, j+8 ); }
}
このプログラムは、i=1,2,...,19, j=1,2,...,9に対して点(i*20, j*20)を中心とする直径j+8の円を描く。