グラフィックス基礎及び実習 2020年度 第9回

ex09 課題A

提出期限: 0605金17:00

  1. 授業中の指示にしたがって HTurtle.java を修正し,T61 を作りなさい.
    • HTurtle については,ex07 課題A の完成形をもとにして,Quiz に出てきた二つのコンストラクタの定義を追加すること.ex07 課題Aができてないひとは,先にそちらを仕上げる必要がある.
    • T61 については,指示のあった通りにすること.
  2. 完成したプログラムのソースファイル(2つとも)は,この科目の Moodle コース上の当該の場所へ提出すること.
    • 上記ファイルは締切後に半自動的に処理します.コンパイルエラーになる,ファイル名が違う,といったことのないように注意すること.ファイル名の間違い(大文字小文字も)に注意

ex09 課題B

提出期限: 0605金18:20

  1. 講義資料の Q2 をやりなさい.ただし,次の指示にしたがうこと.
    • 作成するクラス名は Q09B とすること.
    • Q2 で「最小値のインデックス」および「最小値」となっているところを「最大値のインデックス」および「最大値」にして,それに合った実行結果が得られるようにすること.日本語の部分なども含めて,講義資料の「実行結果例」と同じ出力が得られるようにすること.
    • int の配列を作る部分は以下をコピー&ペーストして,コメントを付けたり外したりして,いずれの例でも動作確認しておくこと.以下の行は,提出するソース中に全て残しておくこと.
      		int[] a = { 111, 32, 56, 43, 99, -100, 0, 7, 77, 100 };
      		//int[] a = { -5, -4, -3, -2, -1 };
      		/*
      		int[] a = {
      			868, 260, 304, 382, 962, 576, 855, 310,
      			157, 376, 814, 18, 587, 686, 400, 528,
      			651, 431, 738, 333, 404, 760, 778, 921,
      			870, -1, 998, 697, 722, 622, 5963, 699,
      			245, 872, 6, 634, 100, 699, 657, 424,
      			802, 977, 816, 799, 732, 21, 627, 525,
      			411, 980
      		};
      		*/
      
  2. 完成したプログラムのソースファイルをこの科目の Moodle コース上の当該の場所へ提出すること.
    • 上記ファイルは締切後に半自動的に処理します.コンパイルエラーになる,ファイル名が違う,といったことのないように注意すること.ファイル名の間違い(大文字小文字も)に注意

ex09 課題C

提出期限: 0611木23:59

教科書p.74の練習問題6.18をやりなさい(PTurtle). ただし,次の手順でやること.

  1. 次のような仕様の PTurtle クラスを作る
    • PTurtle は Turtle のサブクラス
    • このクラスには,次の仕様のインスタンスメソッド draw と main メソッドのみ定義する.
      void draw(double[] path, double x, double y)
      折れ線 path を,折れ線の座標の原点が (x, y) に平行移動したものを描く.詳しくは教科書の該当箇所の説明(脚注40), 41)も)参照.
    • main メソッドの中身は次の通りとする.コメントのつけ外し以外は,以下の内容を変更してはいけない.
      	// 例1
      	double[] graph = { 50, 300, 100, 100, 300, 200, 350, 300 };
      	// 例2 奇数個でも大丈夫?
      	//double[] graph = { 50, 300, 100, 100, 300, 200, 350 };
      	// 例3 長さ2のときは?
      	//double[] graph = { 50, 300 };
      	// 例4 長さ1のときは?
      	//double[] graph = { 50 };
      	// 例5 長さ0のときは?
      	//double[] graph = { };
      	// 例6 やつは?
      	/*
      	double[] graph = {
      	    200, 175, 200, 100, 140, 100, 140, 120, 160, 120,
      	    160, 100, 100, 100, 100, 175, 125, 175, 125, 150,
      	    175, 150, 175, 175, 275, 175, 275, 150, 325, 150,
      	    325, 175, 350, 175, 350, 100, 290, 100, 290, 115,
      	    310, 115, 310, 100, 250, 100, 250, 175, 250, 100,
      	    350, 100, 350, 300, 325, 300, 325, 275,  75, 275,
      	    75, 250, 350, 250,  350, 300
      	};
      	*/
      
      	TurtleFrame f = new TurtleFrame(800, 400);
      	f.addMesh();
      	PTurtle m = new PTurtle();
      	f.add(m);
      	m.speed(1);
      	m.draw(graph, 0, 0);
      	m.draw(graph, 400, 0);
      
  2. 例1, 例2が正しく動作するようにしよう.
    • draw を2回呼んでいるが,その間の移動時に線を引いてしまわないよう気をつけよう.
    • 配列 path の長さが奇数のときも正しく動作させるには → 配列の最後の値を無視するようにすればよい.ヒント(白字で書いてます):いろんなやり方がありますが,path の長さが奇数のとき,例えば 7 のとき, path.length / 2 の値は...で, i = 1, 2 のとき 2*i と 2*i+1 は ...
  3. 例3, 4, 5 が正しく動作するようにしよう.path の長さが2未満のときは,draw は何もせず return するようにすればよい.
  4. 例6 で動作確認しよう.
  5. 完成したプログラムのソースファイルをこの科目の Moodle コース上の当該の場所へ提出すること.
    • 上記ファイルは締切後に半自動的に処理します.コンパイルエラーになる,ファイル名が違う,といったことのないように注意すること.ファイル名の間違い(大文字小文字も)に注意

ex09 課題S(omake)

期限: 0612金23:59.これはおまけ課題です.やらなくても減点になりません.やったら加点かも

コマンドライン引数として2つの数を指定すると,下図のような図形を描くプログラムを作りなさい. クラス名は G08Rainbow とし,次の要件を満たすようにすること.

  1. 三角形毎に色を変える
  2. コマンドライン引数で三角形の数と斜辺の長さを指定する

1.については,Colorの配列を用いて実現すること(どんな色を使うかは自分で決めればよいが,色数は以下の例以上にすること). 実行結果の図が示すように,色を順番に使って使い果たしたらまた最初の色から順に使うようにすること.

2.については,次のような動作を実現しよう.

$ java G08Rainbow 6 50   ← 引数を二つ指定すると図形を描く

$ java G08Rainbow     ← 引数を指定しないと以下のメッセージを出して終了
使い方: java G08Rainbow r d
r: 三角形の数, d: 斜辺の長さ

$ java G08Rainbow 6 50 hoge  ← 余分な引数を指定した場合も同様
使い方: java G08Rainbow r d
r: 三角形の数, d: 斜辺の長さ

$ java G08Rainbow 6 hoge  ← 引数が正しい形式でない場合も同様
使い方: java G08Rainbow r d
r: 三角形の数, d: 斜辺の長さ

引数が正しい形式でない場合のチェックを行うには,Integer.parseInt() メソッドの例外処理を行えばよい. 教科書8.3節(p.93-)を参考にしよう.

G06Rainbow-r06.png G06Rainbow-r12.png


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-06-05 (金) 15:45:36