導入
本記事では,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);
}