導入
本記事では,Processingの制御構造について述べる.
乱数の発生 - Random
(int)random(最大値);
とすることで,0~最大値までの整数の乱数を発生させることが出来る.
randomは小数点以下の数字が含まれた形で発生させるが,「(int)」を頭につけることで,整数形で出力し,変数に格納することが出来る.
例えば,
int a = (int)random(255);
とすると,0~255の範囲の整数の乱数を発生させることが出来る.
size(640, 480); colorMode(RGB, 255); int x = (int)random(640); //0~640の乱数を発生 int y = (int)random(480); //0~480の乱数を発生 int w = (int)random(100); //0~100の乱数を発生 int r = (int)random(255); //0~255の乱数を発生 int g = (int)random(255); int b = (int)random(255); fill(r, g, b); ellipse(x, y, w, w);
上記のコードを実行すると,実行する度に,違う位置に違う色で円が描かれる.
for文
for(int i=0; i<10; i++){ //この中に書いてある処理を繰り返す }
ここで,「int i=0;」はiという変数の宣言文である.
つまりfor文の中身は以下の内容で成り立っている.
- 変数iを宣言して0を代入し,
- 変数iが10以下の場合,
- i++(iを一つずつ増加させながら),繰り返す
for文を実際の描画に使うと以下のようになる.
size(640, 480); colorMode(RGB, 255); fill(100, 200, 255); for(int i=0; i<10; i++){ //中でiを使う事が出来る int x = i * 10; //xはiの10倍 int y = i * 20; //yはiの20倍 ellipse(x, y, 20, 20); //左に10, 下に20ずつずれながら10回円が描画される. }
上のコードを実行すると,以下のような表示になる.
randomとfor分の繰り返しを組み合わせて,以下のコードを書いて実行する.
実行結果は,実行する度に変化する.
size(640, 480); colorMode(RGB, 255); for(int i=0; i<100; i++){ //以下の内容を100回繰り返す int x = (int)random(640); //0~640の乱数を発生 int y = (int)random(480); //0~480の乱数を発生 int w = (int)random(100); //0~100の乱数を発生 int r = (int)random(255); //0~255の乱数を発生 int g = (int)random(255); int b = (int)random(255); fill(r, g, b); //ランダムに生成された値を使って色を決定 ellipse(x, y, w, w); //ランダムに生成された値を使って円を描画 }
if文
if文とは以下のような制御構造である.
if(x < a){ //xとaはそれぞれ変数 //x < aの時にこの部分が実行される. } else{ //x < aではない時にこの部分が実行される. }
「if()の括弧の中身を「条件文」といい,以下のような条件文が使える.
- x == a : xがaと同じである時
- x < a : xがaよりも小さい時
- x <= a : xがa以下の時
- x > a : xがaよりも大きい時
- x >= a : xがa以上の時
また,条件文は,「||(もしくは,論理和)」か「&&(かつ,論理積)」で複数つなげることが出来る.
「if(x < a || y < b)」(x<aもしくはy<bの時),「if(x < a && y < b)」(x<aかつy<bの時),のように書く.
以下のコードは,for文で円を横に描き続け,xの値が320で色を切り替えるものである.
「i+=40;」とは,for文の中でiが40ずつ増えていくことを表している.
size(640, 480); colorMode(RGB, 255); int y = 240; for(int i=0; i<640; i+=40){ int x = i; if(x < 320){ fill(255, 0, 0); } else{ fill(0, 255, 0); } ellipse(x, y, 40, 40); }
randomと組み合わせて,全ての値をrandomで生成しつつ,色合いを真ん中で変更するコードは以下のようになる.
xが320より小さい場合R赤の値を最大値に固定し,xが320以上の場合はg緑の値を最大値に固定している.
size(640, 480); colorMode(RGB, 255); for(int i=0; i<100; i++){ int x = (int)random(640); int y = (int)random(480); int w = (int)random(100); int r = (int)random(255); int g = (int)random(255); int b = (int)random(255); if(x < 320){ fill(255, g, b); } else{ fill(r, 255, b); } ellipse(x, y, w, w); }