#author("2016-09-21T14:01:51+09:00","default:kyo-in","kyo-in")
[[プログラミング基礎/2015/2015年12月17日]]
#author("2016-09-21T14:50:01+09:00","default:kyo-in","kyo-in")
*講義資料の予習 [#t51bdd23]
**練習問題の詳しい解説 [#j6b42a71]
練習: 人の並び - 解答例 

 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