2001年6月11日更新 関谷トップページへ CG2001 トップページへ  

図形処理・計算処理実習No.8 Javaでのグラフィックス(3)マウスによる3D軸測投影の回転

2000.6.7,2001.6.11  KPC 情報技術科  関谷

1. 前回のJavaグラフィックス(2)の復習とコメント

前回は、slsでの渦巻き模様(MoveとTurnでの練習問題56)をJavaに移植して、キー・イベント処理によるグラフィックスを実習した。

1.1 Glibwvクラス

 GlibwvのメソッドWindow() とView()を使って、パラメータの異なる描画を幾つか並べることなどができるようにしている(2次元の座標変換をしての描画)。このGlibwvクラスの描画メソッドを使うには、その描画の前に、Window() とView()メソッドを実行しておく必要がある。(2次元の座標変換のパラメータをセット)

1.2 イベント処理

 アプレットで、ボタンやテキストフィールド、チョイスボタンなどを使用した。
 中山のテキストの以下を参照した。あるいは、WebのJava関連のページでもよい。
 4章GUIとレイアウトマネージャ(1.GUIとAWT 2.レイアウトマネージャなど)
 5章 イベント処理(1.イベント階層 2.イベント処理2.1アクションイベント処理など)

1.3 C言語から移植した渦巻き模様appletプログラム

 ソースプログラムka_cap56.javaは、こちらを参照のこと。

 C言語のプログラムでは、キー入力をMS-DOSプロンプトの窓でscanf()関数で行っていたが、appletでは、GUI部品のテキストフィールド、チョイスボタンなどを使用する。
(注)文字列から数値への変換( angle=Double.parseDouble(sta);)が、appletviewerでは出来ても、ブラウザではできないことが分かった。これは、チョイスボタンで使っていたものである。テキストフィールドでの変換方法に変えたものは、OKである。

 3つの図を同時に表示するように改造した。(パラメータの配列での保存とviewの変更など)(起動時は、パラメータを変えた図を表示している。)
(パラメータは3つまでを順番に更新するようにした。)

 再描画のボタンを追加し、このボタンをクリックしたときに再描画する。

Webレポートへのコメント

 Javaのプログラム構造を考察すること。(クラスやイベント処理)
 そして、今回のMoveとTurnプログラムの改造をする。あるいは、逆の順序でも良いが。
 テキストフィールドでの入力などがあるので、アプレットは、ブラウザで操作できるようにすること。(画面のイメージをリンクしても、キー入力によりパラメータを変えて、再描画ボタンでの描画などができない。)
 C言語とJava言語との比較の考察も欲しい。
 機能の違いでは、C言語のときには、スクリーン1枚ごとに書替えていたが、Javaでは、paintメソッドで、3枚を順番にだが再描画ボタンで1度に描くので、どのような工夫をしているだろうか?

 

2.今日の学習-Javaでのグラフィックス(3)マウスによる3D軸測投影の回転

2.1 移植・改造の考え方

 3Dでの軸測投影を、C言語のプログラムでは、GUIではなく、コマンド・プロンプトの窓でのキー入力でパラメータを指定していた。
 今日のJavaプログラムでは、マウスを使っての回転指示に変更した。

 (注)山本芳人,Javaによる図形処理入門,工学図書,1998.3,pp.205-208などを参照した。Webページにも、これらのAppletがあり、イベント操作が体験できる。さらに、それらのJavaソースも見れる。

 

2.2 C言語から移植・改造した軸測投影appletプログラムの実行

 原点を固定して、マウスの水平方向のドラッグでの移動量で、y軸回りの回転量として、上下方向のドラッグでの移動量をx軸回りの回転量としている。移動の途中も描画をしているので、マウスの動きに追随している。なお、左側には、固定した軸測投影図を表示している。

2.3 移植・改造した軸測投影appletソースプログラム

 ソースプログラムkace59m.javaは、こちらを参照のこと。

 マウスイベント処理については、中山のテキスト(「Java2グラフィックスプログラミング入門」)の第5章 2.3マウスイベント処理などを参照のこと。マウスのイベントには、2種のリスナーがある。

 C言語からJavaへの移植では、C言語の構造体データの扱いで苦労している。Javaでは、クラスにしてそのクラスの配列を作ればよいのだが、クラス配列の初期化が、単純に{ }で囲めないからだった。
 newでオブジェクトを生成して、次にメンバ変数のデータを代入する必要がある。
 このため、x座標、y座標などをそれぞれ、単純な配列にして、代入をしている。

2.4 実習の課題

 軸測投影appletプログラムをまず、動かしてみる。次に中身を解析して、改造を行う。
このプログラムの動作確認や解析だけならば、このWebページから、できる。
改造するには、ファイルサーバからコピーして、編集・コンパイルなどをして各自のフォルダで動作させること。

 ソースプログラムkace59m.java,HTMLファイルkace59m.htmlはファイルサーバi:\sekiya\図形処理にあるので、コピーして,氏名,addressタグなど編集する。( Glibwv.java、クラスファイルGlibwv.classについては、前回コピーしているので、同じフォルダならコピー不要である。)

各自のフォルダでの起動は、kace59m.htmlをダブルクリックするか、このhtmlファイルをappletviewerで起動する。

 移植したグラフィックスライブラリGlibwv.class(ソースはGlibwv.java)についても、解析する。(前回の続きであるが。)
 マウスによるイベント処理は、どのように行っているか?
 印刷をするには、どうしたらよいか?

2.5 Webページでのレポート提出

 前回と同様で、appletタグを持つhtmlファイルへのハイパーリンクとする。(イメージの貼り付けは、マウスで動かせないから、プログラムの動作が出来ず不適当である。)