練習課題
Javaでかかれた例題を参考に、JavaまたはC言語を用いて練習(簡単な修正で動作)を行い。その後課題に挑戦してください。
練習問題を行なうに当たっては、マウスの機能の有無、背景や線の色の変更、画面サイズの変更、見る方向の変更などを試みて、下記のように自分なりのプログラムに修正して下さい。
- Bresenhamの直線描画:
- ファイルで描画する2端点の座標を指定できるように変更してみる。
- 乱数を使用して2端点の座標を生成し、複数の線分をスクリーン中に描画する。なお、生成した端点の座標がスクリーン内になるように制限すること。
- ガスケットの描画;
- マウスで画面をクリックするごと複雑な図形になるようにする。すなわちレベルnをマウスクリックで1づつ増加するように変更する。
- 再帰のレベレ毎に色を変更する。
プログラミング課題
インタラクテイブ性のあるプログラムが理想であり、それを遠隔地でも評価するにはJavaで作成すると効果的であるの
で、可能な人はできるだけJavaを試みて下さい(この場合画像サイズは300x300以下でもよい)。 OpenGLを用い
てスクリーン上に表示する方法でもよい。この際、出力例がカラー画像の場合、それを評価して欲しい人は、自分のホ
ームページに画像を置いて見れるようにしても良い。
課題3と4はいずれかを選択してもいい。
課題1. 2端点P1P2を結ぶ直線に対する下記のプログラムを作成せよ。
- 2端点P1P2を結ぶ直線に対する法線を計算するプログラムを作成せよ。
- 新たな点Pを入力し、その点が直線の上にあるかP1P2に対し右側か左側か判断するプログラムを作成せよ。
- 2端点P3P4を結ぶ線分を与え、線分P1P2と交差するかどうか判定し、交差する場合は交点を計算するプログラムを作成せよ。
課題2. 直線のクリッピングのプログラムを作成せよ。
- ウインドウは4辺形とし、コーヘンサザーランドの方法がいつの方法であるが、どんな方法でもいい。
- 線分はマウスで指定するのでもいいし、ファイルからデータをよむのでもいい。
課題3. 凸多角形と線分の交差判定プログラムを作成せよ。
- 点P1,...,Pnで構成される凸多角形と、線分PaPbを与え、それらが交差するかどうかを判定し、交差する場合は線分の多角形内部は描画しないようにする。
- 線分はマウスで指定するのでもいいし、ファイルからデータをよむのでもいい。
課題4 キーフレームアニメーションを作成せよ
- 最初と最後の形状を折れ線(点数は同じ)で表現し、点列を入力する。
- 最初と最後の点の位置から、線形補間し中間の画像を作成する。中間の絵は3枚以上描画すること。
レポート :プログラミングがどうしても困難な場合は下記のレポート提出のこと。
- 3点Pa(0,1,0), Pb(1,0,0), Pc(0,0,1)を含む面の単位法線ベクトルを計算せよ。
- 配布資料を読んで、リアルな画像をえるための技術をまとめよ(1ページ程度)。
- 下記のSteven A. Coons Awardの受賞者のうち2名を選び、かれらの業績やその手法を解説せよ(1ページ程度)。
http://www.siggraph.org/awards/
- 資料の4.9 Summary、および4.10のcase study4.6の訳を行え。
参考
- Java の場合;
- C言語の場合;
これらの課題において、画像をセーブすることが必要になるが、保存の画像形式およびそのプログラムは下記を参考にして下さい。
/~nis/junk/ppm.html
- 参考資料
- [1] java文法および例題の説明
締切: 8月22日(月曜)17時まで
各自のホームページに置いてメイル連絡するか、ファイルを添付してメイルする。
連絡先: email: nis@is.s.u-tokyo.ac.jp
/~nis/
本課題の公開URL:
/~nis/lecture/ShuRep01.html
例題解説
・ 例題1:ブレゼンハムの直線描画
(マウスで2端点指定,増分法)
プログラム例
Applet例,
(簡略版; プログラム例1
Applet例1)
/~nis/javaexampl/javtool/Bresen.html
・ 例題2:シルビンスキーのギャスケット
(自己相似、再帰法)
プログラム例,
Applet例
・ 例題3:3Dデータのワイヤーフレームモデルの表示
(データ構造、透視変換)
プログラム例
Applet例
・ 例題4:一価関数の隠線表示
プログラム例,
Applet例
/~nis/javaexampl/curve/hidfunc.htm
・例題実習
(参考; JavaGraphics基本例;
プログラム例1,
Applet例
,
プログラム例2,
Applet例
)