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

授業の進め方と準備

前回までの作業ができてないひとは,まずは以下を確認して準備しておいてください.自前のPCを用意できない方については,Teams上で案内し(て)ます.

ex05 step1 から step5

ex05 課題A

提出期限: 0508金16:50

ex05 課題B

提出期限: 0508金18:30

G05KamegameQ.png

次のことをやりなさい.

  1. 上記のプログラムを作成する(G05Kamegame)
  2. 6行目を修正して自分の学籍番号と名前を出力するようにする
  3. 7行目の hoge を,「右下に向かうかめを表すインスタンスの変数名」に修正する
  4. 12行目を以下のように修正する.また,これにあわせて2行目に1文追加する(行番号が変わらないようにすること)
    kame.setColor(Color.CHOCOLATE);
  5. 以下の4箇所にそれぞれ指定された処理を行う文を書きなさい(「// アイウエ」というコメントの前に各文を書き,行番号がずれないようにすること)
    • 16行目: speedAllメソッドを呼び出してかめの速さを低速にする
    • 17行目: speedメソッドを呼び出して kame の速さを変える(引数には10を指定すること)
    • 18行目: game の絵の大きさを 0.2 に変更する
    • 22行目: withTurtleAllの値を変化させる
  6. 上記の4箇所は以下のアイウエのいずれかにあてはまる.各行の「// アイウエ」というコメントを修正して,「//ア」や「//エ」のように,あてはまる記号のみを残しなさい.
    • ア:クラス変数に値を代入している
    • イ:クラスメソッドを呼び出している
    • ウ:インスタンス変数に値を代入している
    • エ:インスタンスメソッドを呼び出している
  7. 完成したら,プログラムのソースファイルをこの科目の Moodle コース上の当該の場所へ提出してください.
    • この科目の Moodle コースへの参加法などは Graphicsチーム上で説明してます
    • 上記ファイルは締切後に自動的に処理します.コンパイルエラーになる,ファイル名が違う,といったことのないように注意してください.ファイル名の間違い(大文字小文字も,Kは?)に注意

ex05 課題C

提出期限: 0514木23:59


★ HogeTurtleクラスのAPI仕様

HogeTurtleは,Turtleを拡張したクラス(「拡張したクラス」とはどういう意味かは次回学びます).


step0

G04HogeTurtleQ.png

  1. 右のリンク先から HogeTurtle.class をダウンロードし,この科目のディレクトリに置きなさい.HogeTurtle.class
  2. 上記の内容の G04HogeTurtle.java を作成し,実行しなさい.3匹のかめが出てくるはず.G04HogeTurtle クラスは HogeTurtle クラスを利用するので,1. の作業が正しくできてないと「HogeTurtle の定義が見つからない」というエラーが出るだろう.

step1

G04HogeTurtle.java の 12, 15, 16行目にそれぞれ m1, m2, m3 のインスタンスメソッドを呼び出す文を書き,動作を確認しなさい.ただし,ここで呼ぶインスタンスメソッドは上記の HogeTurtle クラスのAPI仕様に示されたものとする.

step2

G04HogeTurtle.java の10,11行目にそれぞれ m2, m3 のインスタンス変数に値を代入する文を書き,動作を確認しなさい.ただし,m2 のやる気が 2 に,m3 のやる気が 0 になるようにすること.

step3

G04HogeTurtle.java の13行目にクラスメソッドを呼び出す文を書き,動作を確認しなさい.ただし,かめ全員のやる気が +3 されるようにすること.

step4

G04HogeTurtle.java の14行目にクラス変数に値を代入する文を書き,動作を確認しなさい.ただし,この行以降はかめ全員のペンの色が虹色になるようにすること.

step5

19行目にコメントとして自分の名前と学籍番号を記し,できたプログラムのソースファイルをこの科目の Moodle コース上の当該の場所へ提出しなさい.

ex05 課題S

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

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);
	    }
	}
    }
}
  1. 上記のプログラムを作成し,実行してみなさい.ただし,(a), (b) の箇所には,2つのクラスメソッド toGraphX, toPixelY のいずれかの呼び出しが入る.コメントを参考にそれぞれを書き,正しく動くようにしなさい.正しくできれば二次関数のグラフが描かれるはずある.
  2. このプログラムの動作を理解し,説明できるようにしなさい.
  3. このプログラムを修正して,下図のようなグラフが描かれるようにしなさい.ただし,
    • 描画する関数が \( \sin(2\pi x) \) となるようにメソッド f を修正すること.
    • ペンを虹色にするのは,Turtle クラスのかわりに HogeTurtle クラスを使うことで実現すればよい.
    • main メソッド内は,上記の書き換えと
      HogeTurtle.rainbowAll = true;
      の追加以外にはいじらないこと.
    • toGraphX, toPixelY メソッドも変更しないこと
G04Graph.png

少しFrameからはみ出すせいでかめは本当はスクロールバーに隠れるのだが,わかりやすくするためにウィンドウ幅を広げてキャプチャしてある.本当は,Frame の少し内側の領域だけに描画するように工夫するとよい.


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-04-26 (月) 12:58:02