#author("2020-05-06T19:59:44+09:00","default:takataka","takataka") #author("2021-04-26T12:58:02+09:00","default:takataka","takataka") *グラフィックス基礎及び実習 2020年度 授業第5回 [#kd45822f] //&color(Red){''工事中''}; #contents **授業の進め方と準備 [#l5135b5b] 前回までの作業ができてないひとは,まずは以下を確認して準備しておいてください.自前のPCを用意できない方については,Teams上で案内し(て)ます. - [[Graphics/2020/ex00]] - [[Graphics/2020/ex01]] - [[Graphics/2020/ex02]] **ex05 step1 から step5 [#step1_6] - Step1 から Step 5 までは,主としてGraphicsチーム内で活動します - Step6 は,以下の課題に関する説明です **ex05 課題A [#kadaiA] //&color(Red){''工事中''}; ''提出期限: 0508金16:50'' - VSCode で T23.java を開いた状態のスクリーンショットを撮り,その画像をこの科目の Moodle コース上の当該の場所へ提出してください. - スクリーンショットの撮り方を忘れたひとは https://www-tlab.math.ryukoku.ac.jp/wiki/?Graphics/2020/ex02#screenshot へ **ex05 課題B [#kadaiB] //&color(Red){''工事中''}; ''提出期限: 0508金18:30'' &ref(https://www-tlab.math.ryukoku.ac.jp/~takataka/course/Graphics/G05KamegameQ.png); 次のことをやりなさい. + 上記のプログラムを作成する(G05Kamegame) + 6行目を修正して自分の学籍番号と名前を出力するようにする + 7行目の hoge を,「右下に向かうかめを表すインスタンスの変数名」に修正する + 12行目を以下のように修正する.また,これにあわせて2行目に1文追加する(行番号が変わらないようにすること) kame.setColor(Color.CHOCOLATE); +以下の4箇所にそれぞれ指定された処理を行う文を書きなさい(「// アイウエ」というコメントの前に各文を書き,行番号がずれないようにすること) --16行目: speedAllメソッドを呼び出してかめの速さを低速にする --17行目: speedメソッドを呼び出して kame の速さを変える(引数には10を指定すること) --18行目: game の絵の大きさを 0.2 に変更する --22行目: withTurtleAllの値を変化させる +上記の4箇所は以下のアイウエのいずれかにあてはまる.各行の「// アイウエ」というコメントを修正して,あてはまる記号のみを残しなさい. +上記の4箇所は以下のアイウエのいずれかにあてはまる.各行の「// アイウエ」というコメントを修正して,「//ア」や「//エ」のように,あてはまる記号のみを残しなさい. --ア:クラス変数に値を代入している --イ:クラスメソッドを呼び出している --ウ:インスタンス変数に値を代入している --エ:インスタンスメソッドを呼び出している + 完成したら,プログラムのソースファイルをこの科目の Moodle コース上の当該の場所へ提出してください. -- この科目の Moodle コースへの参加法などは Graphicsチーム上で説明してます -- 上記ファイルは締切後に自動的に処理します.コンパイルエラーになる,ファイル名が違う,といったことのないように注意してください.&color(red){''ファイル名の間違い(大文字小文字も,Kは?)に注意''}; **ex05 課題C [#kadaiC] //&color(Red){''工事中''}; ''提出期限: 0514木23:59'' #hr ''★ HogeTurtleクラスのAPI仕様'' HogeTurtleは,Turtleを拡張したクラス(「拡張したクラス」とはどういう意味かは次回学びます). - ''コンストラクタ'' Turtleクラスと同様なので説明は省略. - ''メソッド'' 以下のものの他,Turtle クラスのAPI仕様(p.13)に記されたメソッドも利用可能. > :void draw() | 現在のかめの位置でやつの絵を描く.やる気に応じて絵の描き方が少し変化する. :static void setBonusAll(int bonus) | 全てのかめのやる気を bonus だけアップさせる. < - ''フィールド'' 以下のものの他,Turtle クラスのAPI仕様(p.13)に記されたフィールドも利用可能. > :int yaruki | かめのやる気.0以下ならやる気なし,1なら普通,2以上なら数が大きいほどやる気あり.初期値は1. :static boolean rainbowAll | true ならペンを虹色に変化させる.false なら従来どおり.初期値は false. < #hr ***step0 [#hb9ca146] &ref(https://www-tlab.math.ryukoku.ac.jp/~takataka/course/Graphics/G04HogeTurtleQ.png); + 右のリンク先から HogeTurtle.class をダウンロードし,この科目のディレクトリに置きなさい.[[HogeTurtle.class>Graphics:HogeTurtle.class]] + 上記の内容の G04HogeTurtle.java を作成し,実行しなさい.3匹のかめが出てくるはず.G04HogeTurtle クラスは HogeTurtle クラスを利用するので,1. の作業が正しくできてないと「HogeTurtle の定義が見つからない」というエラーが出るだろう. ***step1 [#h6affcf6] G04HogeTurtle.java の 12, 15, 16行目にそれぞれ m1, m2, m3 のインスタンスメソッドを呼び出す文を書き,動作を確認しなさい.ただし,ここで呼ぶインスタンスメソッドは上記の HogeTurtle クラスのAPI仕様に示されたものとする. ***step2 [#gb37ad09] G04HogeTurtle.java の10,11行目にそれぞれ m2, m3 のインスタンス変数に値を代入する文を書き,動作を確認しなさい.ただし,m2 のやる気が 2 に,m3 のやる気が 0 になるようにすること. ***step3 [#ccab4eae] G04HogeTurtle.java の13行目にクラスメソッドを呼び出す文を書き,動作を確認しなさい.ただし,かめ全員のやる気が +3 されるようにすること. ***step4 [#k3e0278b] G04HogeTurtle.java の14行目にクラス変数に値を代入する文を書き,動作を確認しなさい.ただし,この行以降はかめ全員のペンの色が虹色になるようにすること. ***step5 [#n10ce0d2] 19行目にコメントとして自分の名前と学籍番号を記し,できたプログラムのソースファイルをこの科目の Moodle コース上の当該の場所へ提出しなさい. **ex05 課題S [#kadaiS] //&color(Red){''工事中''}; ''期限: 0514木23:59.これはおまけ課題です.やらなくても減点になりません.やったら加点かも'' //&color(Red){工事中}; #pre{{ import tg.*; public class G04Graph{ // クラス変数の宣言と初期化 public static final int WIDTH = 500; public static final int HEIGHT = 500; public static double XMAX = 1.0; public static double YMAX = 1.0; // 描画する関数 public static double f(double x){ return x*x; } // ピクセル単位のx座標の値(左端が0,右端がWIDTH)を // グラフのx座標の値(真ん中が0,左端が -XMAX,右端がXMAX)に変換 public static double toGraphX(int pixelX){ return XMAX * (double)(pixelX - WIDTH/2) / (WIDTH/2); } // グラフのy座標の値(真ん中が0,上端が YMAX,下端が-YMAX)を // ピクセル単位のy座標の値(上端が0,下端がHEIGHT)に変換 public static int toPixelY(double graphY){ return (int)(-graphY / YMAX * (HEIGHT/2)) + HEIGHT/2; } // mainメソッド public static void main(String[] args){ TurtleFrame f = new TurtleFrame(WIDTH, HEIGHT); Turtle m = new Turtle(); f.add(m); m.speed(5); // X軸を描く m.up(); m.moveTo(0, HEIGHT/2); m.down(); m.moveTo(WIDTH - 1, HEIGHT/2); // Y軸を描く m.up(); m.moveTo(WIDTH/2, 0); m.down(); m.moveTo(WIDTH/2, HEIGHT - 1); // 曲線を描く for(int px = 0; px <= WIDTH; px += 5){ double x = /* (a) px に対応するグラフの x 座標の値を求める */; int py = /* (b) グラフの y 座標の値を求め,それをピクセル単位の y 座標の値に変換する */; if(px == 0){ m.up(); m.moveTo(px, py); m.down(); }else{ m.moveTo(px, py); } } } } }} + 上記のプログラムを作成し,実行してみなさい.ただし,(a), (b) の箇所には,2つのクラスメソッド toGraphX, toPixelY のいずれかの呼び出しが入る.コメントを参考にそれぞれを書き,正しく動くようにしなさい.正しくできれば二次関数のグラフが描かれるはずある. + このプログラムの動作を理解し,説明できるようにしなさい. + このプログラムを修正して,下図のようなグラフが描かれるようにしなさい.ただし, -- 描画する関数が &mathjax{\sin(2\pi x)}; となるようにメソッド f を修正すること. -- ペンを虹色にするのは,Turtle クラスのかわりに HogeTurtle クラスを使うことで実現すればよい. -- main メソッド内は,上記の書き換えと HogeTurtle.rainbowAll = true; の追加以外にはいじらないこと. -- toGraphX, toPixelY メソッドも変更しないこと #ref(https://www-tlab.math.ryukoku.ac.jp/~takataka/course/Graphics/G04Graph.png,nolink) &size(14){少しFrameからはみ出すせいでかめは本当はスクロールバーに隠れるのだが,わかりやすくするためにウィンドウ幅を広げてキャプチャしてある.本当は,Frame の少し内側の領域だけに描画するように工夫するとよい.};