グラフィックス基礎及び実習 2017年度 第11回 †[edit]
課題A(self) 完成目標: 今回の4講時の実習終了まで †[edit]
- 右のリンク先のPDFファイルを閲覧し,手書きの部分を講義資料に書き写しなさい.資料(学内アクセス限定)
- JPanelExample2 を実際に作成して動作確認しなさい.
課題B(self) 完成目標: 今回の4講時の実習終了まで †[edit]
- 今回の課題Aで作成した JPanelExample2 クラス
- 第10回課題Bで作成した G10Pochi クラス
- 第10回課題Cで作成した G10Check クラス
はいずれも JPanel のサブクラスである.これらのコンポーネントを下図のように並べるプログラムを作ろう.

ただし,次の指示に従うこと
- クラス名は G11B とする
- 全部一から作るのではなく,上記3つのクラスを利用すること
- 上記の3つのクラスのコンポーネントはそれぞれ背景色を赤緑青に設定している.自分で適当な色を選び同様に背景色を設定すること.背景色を個別に変えるには,それぞれのインスタンスに対してインスタンスメソッド setBackground を呼べばよい.
- これら3つのコンポーネントを図のように配置するには,レイアウト方式として GridLayout を使えばよい.
コンストラクタの引数は, ( 2, 2 ) または ( 2, 0 ) または ( 0, 2 ) とすればよい.後ろ2つの指定でなぜokかは教科書参照.余裕があれば,引数をいろいろ変えてみたり,他のレイアウト方式も試してみたりしよう.
- check JPanelExample2, G10Pochi, G10Check ではインスタンスメソッド setBackground を定義していないのになぜ使えるかというと,これら3つのクラスが JPanel クラスのサブクラスで,そこから上記メソッドを 継承 しているからである(さらにいうと,上記メソッドはJComponentクラスで定義されており, JPanel クラスもそこからこのメソッドを継承している).
- check G11B では setLayout というインスタンスメソッドは定義してないのになぜ使えるかというと... 上と同じことですね.
課題C(self) 完成目標: 今回の実習終了まで †[edit]
- 右のリンク先のPDFファイルを閲覧し,手書きの部分を講義資料に書き写しなさい.資料(学内アクセス限定)
- CustomGraphics を実際に作成して動作確認しなさい.
- 講義資料 3/4 の Q1 をやりなさい.ただし,まず紙に描いてみて,それから実際にプログラムを作って答え合わせすること.
課題D(TA) 締切: 次回実習開始直後 †[edit]
G11DoraSample.class
上記リンク先のクラスファイルをダウンロードして実行しなさい.これと同じことのできるプログラムを作成しなさい(G11Dora).
ウィンドウサイズは 300 x 300 ピクセルとすること.
図形の形や位置は厳密にサンプル通りでなくてもよいが,図の構成要素を省略したり単純化(例:頭の形をただの長方形にするなど)したりしないこと.
時間があればいろいろ書き足したり工夫すればよい.
面白いものができたら高橋に見せてくれると嬉しいです.
画像として保存したい,という人は Graphics/FAQ#capture へどうぞ.
check
- 頭や目を描くのに使うメソッドが「引数でどこの座標を指定するのか」をちゃんと把握した上で,紙の上で大まかな配置と座標を考えてからプログラミングを始めることを強く勧めます
- プログラムのどの部分がどこを描いているのかわかりやすいように,詳しいコメントをつけておこう
- 図形を描く順番をよく考えよう.上の例では鼻は…
- 目をきれいに描くには, 同じ大きさの楕円を,白塗りつぶし → 黒輪郭線のみ の順で描く ようにするとよいでしょう
- これはいったい誰でしょう? (1) ドラエモン (2) トラえもん (3) ドラ之もん (4) どらえもん (5) どらエモソ

- クリックで拡大します
- 下の二つは fillOval で描いてるように見せかけて、ちゃんと fillRoundRect 使ってます
課題S(おまけ) †[edit]
以前作った Complex2 クラスと上記課題の G11Dora クラスを利用して,複素平面に複素数の値を点として描くことのできるプログラムを作成しよう(G11ComplexPlane).
ただし,次のような仕様とする
- G11ComplexPlaneは,G11Doraのサブクラスとする
- 描画領域の大きさは 300 x 300 ピクセルとする
- 描画領域の真ん中が原点,左上が \( -150+150i \),右下が \( 150-150i \)
- 次式で \( N=5 \) とおいて計算される5点 \( z_{0},z_{1},z_{2},z_{3},z_{4} \) を描く(乗算メソッドを使おう)
\[ \left\{ \begin{array}{ll} z_{0} = 100 & \\ z_{n} = a \times z_{n-1}\qquad & (n = 1, 2, \ldots , N-1) \end{array} \right. \]
\[ a = \cos{\frac{2\pi}{N}} + i\sin{\frac{2\pi}{N}} \]
実行結果は下図のようになる.
利用するクラスファイルを同じディレクトリに置かないといけないことに注意.
Nは変数として(またはコマンドライン引数で与えて)いろいろ変えられるようなプログラムにしよう.
