講義資料の予習

練習問題の詳しい解説

練習: 人の並び - 解答例

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問を解きながら質問タイムの予定.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-09-21 (水) 14:50:01