「変数」のページにあるプログラム

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の円を描く。

1-9-1.png

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS