コンテンツにスキップ

14.図形を敷き詰めよう

1.図形を敷き詰める

繰り返しをうまく使うと、画面を画像で敷き詰める(しきつめる)ことができます。繰り返しの中に繰り返しを入れるというテクニックを使います。やや難しいので順を追って作ってみましょう。

出来上がり

四角形をランダムな色で敷き詰めるプログラムです。for文を2個使います。

void setup(){
size(600,400);
}
void draw(){
for(int x = 0; x < 6; x++){
for(int y = 0; y < 4; y++){
fill(random(255),random(255),random(255));
rect(100*x, 100*y, 100, 100);
}
}
}

2.縦に並べてみる

このプログラムをゼロから書くのは難しいので、まず、縦に1列並べるところからやってみましょう。

void setup(){
size(600,400);
}
void draw(){
for(int y = 0; y < 4; y++){
fill(random(255),random(255),random(255));
rect(0, 100*y, 100, 100);
}
}

このプログラムのfor文では、yの値が0から3まで変化して、そのたびにrect()が描く四角形の位置が変わります。どういうふうに変わるのかを表にするとこのようになります。

繰り返しの回数yの値rect()
10rect(0, 0, 100, 100)
21rect(0, 100, 100, 100)
32rect(0, 200, 100, 100)
43rect(0, 300, 100, 100)

このように、y座標が100ずつずれていくので、縦に100x100の四角が4つ並びます。

3.for文の中にfor文を書く

さきほどのやり方で、縦に4つの四角形が並んだので、これを全体に並べるには、縦に4つ並べるのを横方向にも繰り返せばよいことになります。なので、縦に4つ並べるfor文の外側にさらにfor文をつけて繰り返します。

// for文の部分だけ抜き出し
for(int x = 0; x < 6; x++){
for(int y = 0; y < 4; y++){
fill(random(255),random(255),random(255));
rect(100*x, 100*y, 100, 100);
}
}

今回、敷き詰める画面は横600ピクセル、縦400ピクセルの画面です。ここに縦100x横100の正方形を敷き詰めます。 なので、横(x)方向に6回繰り返し、縦(y)方向に4回繰り返せばよいことになります。 縦に4つ一列作るのを6回繰り返して24個の四角形を描いています。

24回の繰り返しで、変数xとyの値がどのように変化するかを表にすると以下のようになります。それぞれのrect()がどの部分の四角形に当てはまるのかを考えてみましょう。

回数xの値yの値rect()
100rect(0, 0, 100, 100)
201rect(0, 100, 100, 100)
302rect(0, 200, 100, 100)
403rect(0, 300, 100, 100)
510rect(100, 0, 100, 100)
611rect(100, 100, 100, 100)
712rect(100, 200, 100, 100)
813rect(100, 300, 100, 100)
920rect(200, 0, 100, 100)
1021rect(200, 100,100, 100)
1122rect(200, 200, 100, 100)
1223rect(200, 300, 100, 100)
1330rect(300, 0, 100, 100)
1431rect(300, 100, 100, 100)
1532rect(300, 200, 100, 100)
1633rect(300, 300, 100, 100)
1740rect(400, 0, 100, 100)
1841rect(400, 100, 100, 100)
1942rect(400, 200, 100, 100)
2043rect(400, 300, 100, 100)
2150rect(500, 0, 100, 100)
2251rect(500, 100, 100, 100)
2352rect(500, 200, 100, 100)
2453rect(500, 300, 100, 100)