#author("2021-05-31T21:51:52+09:00","default:takataka","takataka") #author("2021-05-31T21:52:21+09:00","default:takataka","takataka") *グラフィックス基礎及び実習 2021年度 第08回 実習と宿題 [#e9701092] #contents //&color(#ff0000){''工事中''}; //**注意 [#notice] **実習課題A 締切: 当日13:30 [#kadaiA] &color(#00a000){''以下のことをやって,作った二つのソースファイルを moodle の該当の場所へ提出してください.''}; ファイル名の間違いに注意 [[第8回>../#ex08]] 授業動画の指示にしたがって HTurtle を修正&T61を作成しましょう. 「HTurtleに,別途指示した二つのコンストラクタの定義を追加」の指示内容である二つのコンストラクタの定義は↓に示します.&color(red){''引数なしコンストラクタは,HTurtleの3引数コンストラクタを呼ぶ形とすること.''}; :HTurtle( )| 座標 (200, 200) に 0 度の角度で HTurtle を作成 :HTurtle(double x, double y, double a)|座標 (x, y) に a 度の角度で HTurtle を作成 **実習課題B 締切: 当日16:00 [#kadaiB] &color(#00a000){''以下のことをやって,作ったソースファイルを moodle の該当の場所へ提出してください.''}; ファイル名の間違いに注意 教科書p.74の練習問題6.18をやりなさい(PTurtle). ただし,次の手順でやること. + 次のような仕様の PTurtle クラスを作る -- PTurtle は Turtle のサブクラス -- このクラスには,次の仕様のインスタンスメソッド draw と main メソッドのみ定義する. > :void draw(double[] path, double x, double y) | 折れ線 path を,折れ線の座標の原点が (x, y) に平行移動したものを描く.詳しくは教科書の該当箇所の説明(脚注40), 41)も)参照. < -- main メソッドの中身は次の通りとする.&color(red){''コメントのつけ外し以外は,以下の内容を変更してはいけない.''}; #pre{{ // 例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); }} + 例1, 例2が正しく動作するようにしよう. -- &color(red){''draw を2回呼んでいるが,その間の移動時に線を引いてしまわないよう気をつけよう.''}; -- 配列 path の長さが奇数のときも正しく動作させるには → 配列の最後の値を無視するようにすればよい.ヒント(白字で書いてます):いろんなやり方がありますが,path の長さが奇数のとき,例えば 7 のとき,&color(white){ path.length / 2 }; の値は...で, &color(white){i = 1, 2 のとき 2*i と 2*i+1 は}; ... + 例3, 4, 5 が正しく動作するようにしよう.path の長さが2未満のときは,draw は何もせず return するようにすればよい. + 例6 で動作確認しよう. **宿題 [#hw] &color(#00a000){''次回授業までに必ずやっておくこと''}; 次回の授業の資料(PDFや動画)等は [[こちら>../../2021#ex09]] からどうぞ. + 講義資料を入手.紙でほしい方は各自で印刷してください. > キャンパス内各所に設置されたプリンタで印刷することもできます.くわしくは「ポータル > 情報環境 > マニュアル > [[印刷利用マニュアル>https://www.media.ryukoku.ac.jp/local/manual/printsystem_manual.pdf]]」参照. < + 授業動画を視聴する > 学内の実習室等に設置の PC ではスピーカから音が出ませんので,イヤフォン/ヘッドフォンを用意する必要あり < + 講義資料・授業動画に出てくるプログラムを実際に作って実行してみる **実習課題S(omake) 締切: 次回実習時間終了時 [#kadaiS] &color(#00a000){''これはおまけ課題です.やらなくても減点になりません.やったら加点かも''}; (moodle の「おまけ課題」のところに,「自由課題」というのを書いときました.よかったら見てね) //&color(#ff0000){''工事中''}; コマンドライン引数として2つの数を指定すると,下図のような図形を描くプログラムを作りなさい. クラス名は G08Rainbow とし,次の要件を満たすようにすること. +三角形毎に色を変える > Colorの配列を用いて実現すること(どんな色を使うかは自分で決めればよいが,色数は以下の例以上にすること). 実行結果の図が示すように,色を順番に使って使い果たしたらまた最初の色から順に使うようにすること. < +コマンドライン引数で三角形の数と斜辺の長さを指定する > 次のような動作を実現すること.引数が正しい形式でない場合のチェックを行うには,Integer.parseInt() メソッドの例外処理を行えばよい. 教科書8.3節(p.93-)を参考にしよう. < #pre{{ $ java G08Rainbow 6 50 ← 引数を二つ指定すると図形を描く $ java G08Rainbow ← 引数を指定しないと以下のメッセージを出すだけで終了(TurtleFrameも出てこない) $ java G08Rainbow ← 引数を指定しないと以下のメッセージを出すだけで終了.TurtleFrameも出現させない. 使い方: 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: 斜辺の長さ }} &ref(https://www-tlab.math.ryukoku.ac.jp/~takataka/course/Graphics/G06Rainbow-r06.png,nolink); &ref(https://www-tlab.math.ryukoku.ac.jp/~takataka/course/Graphics/G06Rainbow-r12.png,nolink);