練習: 人の並び - 解答例
size(400, 400); // ウィンドウのサイズ background(255, 255, 255); // 背景色(白) noStroke(); // 輪郭線を無効に int x = 50; // 人の中心の x座標の初期値 int y = 300; // 人の足元の y座標 int dx = 50; // 人の中心線間の距離 int[] h; // 身長 int w = 20; // 体の幅 int d = 30; // 顔の直径 h = new int[] { 145, 186, 176, 168, 186, 156, 172 }; // 身長; 人数は7名 fill(0, 0, 0); // 塗る色 (黒) for(int i = 0; i < h.length; i++) { ellipse(x, y - h[i], d, d); // 頭 rect(x - w / 2, y - h[i], w, h[i]); // 胴体 x = x + dx; }
これはfor文を使わずに書くと次のようになる.
size(400, 400); // ウィンドウのサイズ background(255, 255, 255); // 背景色(白) noStroke(); // 輪郭線を無効に int x = 50; // 人の中心の x座標の初期値 int y = 300; // 人の足元の y座標 int dx = 50; // 人の中心線間の距離 int[] h; // 身長 int w = 20; // 体の幅 int d = 30; // 顔の直径 h = new int[] { 145, 186, 176, 168, 186, 156, 172 }; // 身長; 人数は7名 fill(0, 0, 0); // 塗る色 (黒) ellipse(x, y - h[0], d, d); // 頭 rect(x - w / 2, y - h[0], w, h[0]); // 胴体 x = x + dx; ellipse(x, y - h[1], d, d); // 頭 rect(x - w / 2, y - h[1], w, h[1]); // 胴体 x = x + dx; ellipse(x, y - h[2], d, d); // 頭 rect(x - w / 2, y - h[2], w, h[2]); // 胴体 x = x + dx; ellipse(x, y - h[3], d, d); // 頭 rect(x - w / 2, y - h[3], w, h[3]); // 胴体 x = x + dx; ellipse(x, y - h[4], d, d); // 頭 rect(x - w / 2, y - h[4], w, h[4]); // 胴体 x = x + dx; ellipse(x, y - h[5], d, d); // 頭 rect(x - w / 2, y - h[5], w, h[5]); // 胴体 x = x + dx; ellipse(x, y - h[6], d, d); // 頭 rect(x - w / 2, y - h[6], w, h[6]); // 胴体
上記から分かる通り,似たようなことを繰り返し書かれており,無駄が多い.そこでfor文使うわけである.
最初の一人だけ描く部分を取り出すと以下になる.
size(400, 400); // ウィンドウのサイズ background(255, 255, 255); // 背景色(白) noStroke(); // 輪郭線を無効に int x = 50; // 人の中心の x座標の初期値 int y = 300; // 人の足元の y座標 int dx = 50; // 人の中心線間の距離 int[] h; // 身長 int w = 20; // 体の幅 int d = 30; // 顔の直径 h = new int[] { 145, 186, 176, 168, 186, 156, 172 }; // 身長; 人数は7名 fill(0, 0, 0); // 塗る色 (黒) ellipse(x, y - h[0], d, d); // 頭 rect(x - w / 2, y - h[0], w, h[0]); // 胴体
ここでh[0]は145であるから,これは以下と同じことである.
size(400, 400); // ウィンドウのサイズ background(255, 255, 255); // 背景色(白) noStroke(); // 輪郭線を無効に int x = 50; // 人の中心の x座標の初期値 int y = 300; // 人の足元の y座標 int dx = 50; // 人の中心線間の距離 int[] h; // 身長 int w = 20; // 体の幅 int d = 30; // 顔の直径 h = new int[] { 145, 186, 176, 168, 186, 156, 172 }; // 身長; 人数は7名 fill(0, 0, 0); // 塗る色 (黒) ellipse(x, y - 145, d, d); // 頭 rect(x - w / 2, y - 145, w, 145); // 胴体
なぜ以下の2行で人が描けるかは黒板で解説予定.
ellipse(x, y - 145, d, d); // 頭 rect(x - w / 2, y - 145, w, 145); // 胴体
あとは演習問題が掲示されていれば最初の1問を解きながら質問タイムの予定.