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() |
|---|---|---|
| 1 | 0 | rect(0, 0, 100, 100) |
| 2 | 1 | rect(0, 100, 100, 100) |
| 3 | 2 | rect(0, 200, 100, 100) |
| 4 | 3 | rect(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() |
|---|---|---|---|
| 1 | 0 | 0 | rect(0, 0, 100, 100) |
| 2 | 0 | 1 | rect(0, 100, 100, 100) |
| 3 | 0 | 2 | rect(0, 200, 100, 100) |
| 4 | 0 | 3 | rect(0, 300, 100, 100) |
| 5 | 1 | 0 | rect(100, 0, 100, 100) |
| 6 | 1 | 1 | rect(100, 100, 100, 100) |
| 7 | 1 | 2 | rect(100, 200, 100, 100) |
| 8 | 1 | 3 | rect(100, 300, 100, 100) |
| 9 | 2 | 0 | rect(200, 0, 100, 100) |
| 10 | 2 | 1 | rect(200, 100,100, 100) |
| 11 | 2 | 2 | rect(200, 200, 100, 100) |
| 12 | 2 | 3 | rect(200, 300, 100, 100) |
| 13 | 3 | 0 | rect(300, 0, 100, 100) |
| 14 | 3 | 1 | rect(300, 100, 100, 100) |
| 15 | 3 | 2 | rect(300, 200, 100, 100) |
| 16 | 3 | 3 | rect(300, 300, 100, 100) |
| 17 | 4 | 0 | rect(400, 0, 100, 100) |
| 18 | 4 | 1 | rect(400, 100, 100, 100) |
| 19 | 4 | 2 | rect(400, 200, 100, 100) |
| 20 | 4 | 3 | rect(400, 300, 100, 100) |
| 21 | 5 | 0 | rect(500, 0, 100, 100) |
| 22 | 5 | 1 | rect(500, 100, 100, 100) |
| 23 | 5 | 2 | rect(500, 200, 100, 100) |
| 24 | 5 | 3 | rect(500, 300, 100, 100) |