[Work/Class/Java with Processing/2_ProcessingBasic]

アート系学生のためのJAVA with Processing - その2-2 Processingの制御構造

導入

本記事では,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文の中身は以下の内容で成り立っている.

  1. 変数iを宣言して0を代入し,
  2. 変数iが10以下の場合,
  3. 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回円が描画される.
}

上のコードを実行すると,以下のような表示になる.

for文を使ったコードの実行状態

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); //ランダムに生成された値を使って円を描画
}
for文でrandomを使い繰り返し生成した値を使ったコードの実行状態

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);
}
for文で使い繰り返し生成した値で円を描画しつつ,if文で位置に従い色分けしたコードの実行状態

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);
}
for文でrandomを使い繰り返し生成した値を使い,if文で位置に従い色分けしたコードの実行状態