Top / Graphics / 2016 / ex09

グラフィックス基礎及び実習 2016年度 第9回 [edit]

課題A(self) 完成目標: 今回の実習終了まで [edit]

この課題では,第7回課題B で作成した HTurtle クラスを改造する.また,第8回課題BとC で作成した MyTurtle クラスも利用する.

  1. 下記のAPI仕様を満たすように,HTurtle クラスに2つのコンストラクタの定義を追加しなさい.
  2. 以下の「ほげ」の部分を正しく書いた G09exA クラスを作成し,動作確認しなさい.
    public class G09exA{
       public static void main(String[] args){
           TurtleFrame f = new TurtleFrame();
           「引数なしのHTurtleのコンストラクタを用いてインスタンスを生成,変数名はh1とする」
           「3引数(引数には順に300,300,90を設定する)のHTurtleのコンストラクタを用いてインスタンスを生成,変数名はh2とする」
           「MyTurtleのインスタンスを生成,変数名はmとする」
           f.add(h1); f.add(h2); f.add(m);
           MyTurtle.speedAll(1);
           h1.house(50);
           h2.polygon(9, 20);
           m.rtriangles(9, 50);
       }
    }
    
  • check [ヒント]HTurtleの3引数のコンストラクタは,Turtleクラスの(つまり スーパークラス)の3引数のコンストラクタを呼んで,それから線の色を赤にすればよいだろう.
  • check [ヒント]HTurtleの引数なしのコンストラクタは,上記と同様に考えてもよいし,HTurtleの3引数の方を呼ぶようにしてもよい.
  • check MyTurtle は自分でコンストラクタを定義していない.このような場合, super(); とだけ書いた引数なしコンストラクタが自動的に定義されているとみなされる.m が描く図形も線が 赤色 になっているのは,このルールが適用されて,MyTurtle() を呼ぶとそのスーパークラスである HTurtle クラスの引数なしコンストラクタが呼び出されるからである.
  • check MyTurtle.speedAll(1); という文は,MyTurtle クラスの クラス メソッドの呼び出しであるが,3匹とも速くなっている.speedAll メソッドが MyTurtle クラスの親の HTurtle クラスの親の Turtle クラスで定義されたものであり,それを継承したものだからである.

HTurtleクラスのAPI仕様(追加) [edit]

コンストラクタ

HTurtle()
(200,200)という座標に0度の角度で,線の色が赤であるHTurtleを生成する.
HTurtle(int x, int y, int angle)
(x, y) という座標に angle 度の角度で,線の色が赤であるHTurtleを生成する.

課題B(TA) 締切: 次回の実習開始直後 [edit]

第8回課題A で一部を作成したHWクラスを改造し,完成させよう.HWクラスのAPI仕様は第7回講義資料の通りとする.また,そこに掲載された Fugayo クラスを実際に作成して動作確認すること.

課題C(self) 完成目標: 次回実習開始直後 [edit]

  1. mkdir コマンドを使い,Graphics20XY ディレクトリの中に g という名前のディレクトリを作りなさい
  2. その中に,教科書p.116のHelloクラスをつくりなさい.

このプログラムの内容については,次回の講義/演習で解説します.

課題S(おまけ) [edit]

複素数を扱うクラスを作ろう.

step1 [edit]

以下のAPI仕様を満たす Complex.java と,Complexクラスの全てのメソッドを呼んで動作確認するmainメソッドを書いた G09exS.java を作る. 以下の仕様からわかるように,データは隠蔽しよう

コンストラクタ

Complex(double re, double im)
re を実部の値,im を虚部の値にもつインスタンスを生成する
Complex()
\( 0 + 0i \) を値にもつインスタンスを生成する

メソッド

void setRe(double re)
このインスタンスの実部の値を re にする
void setIm(double im)
このインスタンスの虚部の値を im にする
double getRe()
このインスタンスの実部の値を返す
double getIm()
このインスタンスの虚部の値を返す
Complex add(Complex z)
このインスタンスに z を加えた新しいインスタンスを返す
static Complex add(Complex z1, Complex z2)
z1 + z2 を返す

ヒント: どちらのaddメソッドも,インスタンスの値を変更するものではないですね.new してそれを return したらよいでしょう.

step2 [edit]

Complexクラスを拡張したクラス Complex2 をつくろう. このクラスは,次のようなものとすること.

(1) コンストラクタの仕様はComplexと同じ

(2) 次の仕様のメソッドを定義する

String toString()
このインスタンスが表す複素数を String にして返す.戻り値の例は(注)へ.

(3) さらに次のようなものを計算するメソッドを追加しよう.乗算,絶対値,共役複素数.

注: 上記の toString メソッドは,Objectクラスで定義されているものを「再定義(オーバーライド)」することになります(教科書p.81参照). System.out.printlnにオブジェクトを渡すと,そいつのtoStringを呼んで返ってきた文字列を使って表示してくれるので,こんなことができるようになります.

Complex2 z1 = new Complex2(2.0, 3.0);
Complex2 z2 = new Complex2(2.0, -3.0);
System.out.println(z1);                → 出力例:    2.0+3.0i
System.out.println(z2);                → 出力例:    2.0-3.0i

step3 [edit]

できあがった Complex2 クラスを使うプログラムを作り,動作確認しよう. さらに,次の問の答えを計算してみよう.

\( z = 2\cos{\frac{5}{3}}\pi + 2i \sin{\frac{5}{3}}\pi \) とおくとき,\( z^6 \) はいくつか? 手計算の結果と比較すること.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-06-02 (木) 15:32:12 (1057d)