2001.5.8 KPC 情報技術科 関谷
3次元空間にある物体を紙やCRTという2次元平面に作画するには、透視図法や軸測投影などを使う。
回転角の正方向は、各軸の正方向に向かって右ねじを回す向きとし、x軸、y軸、z軸回りの回転角をそれぞれ、α、β、γとする。回転の順序をy軸→x軸→z軸の順に行うものとすると、点(x、y、z)は、次のように変換される。 (これも、3次元空間のベクトルの成分表示と考えて、それぞれの成分の計算を加えることで求まる。) y軸回りにβ回転 -> x1=xcos(β)+zsin(β) y1=y z1=−xsin(β)+zcos(β) x軸回りにα回転 -> x2=x1 y2=y1cos(α)−z1sin(α) z2=y1sin(α)+z1cos(α) z軸回りにγ回転 -> x3=x2cos(γ)−y2sin(γ) y3=x2sin(γ)+y2cos(γ) z3=z2
これは、上の結果の(x3、y3、z3)のうち、z3を無視すること。 したがって、上の示した式のz2、z3は不用となる。
家のデータは、構造体配列に格納している。 3つの回転量は、角度でキーインする。 3種のパラメータの投影図を、スクリーンでは、横に並べて表示する。
例題59 家のデータを軸測投影で表示(3 View)
この一番右の図では、家を床下から見ているのであるが、最初は、そのようには見えないであろう。ワイヤーフレーム表示でなく、光を当てて、壁面を考慮した陰線消去などをしないと、なかなかに、正確には見れないことが分かる。
この投影図の作成で、マウスを使ってパラメータを連続的に変えるようにしたものがあるので、参照のこと。パラメータを見ながら、図を確かめると良い。なお、皆さんも後日、このJava appletプログラミングを実習する。
軸測投影では、投影面に対し平行光線を当てて投影した。透視では、ある点に向かって収束する光を当てる。この点を投影中心(消失点)と呼び、z軸上にとることにする。これの絶対値が大きければ、遠近感が小さくなる。 逆に、立体に近ければ、遠近感が強調される。 透視では、投影中心に対する立体の位置が異なると、立体の見え方が変わる。立体が投影中心より上方にあれば、立体を見上げるように透視される。 透視では、立体の回転に加え、平行移動の操作が加わる。 y軸回りのβ回転と、x、y、z方向の平行移動量をl、m、nとし、投影中心をz=−vpとする。また,変換後の点は、z=0平面(x−y平面)に透視するものとする。 変換式は、つぎのようになる。 まず、回転と平行移動により、 x1=xcos(β) + zsin(β) +l y1=y+m z1=−xsin(β) + zcos(β) +n が得られ、これをz=0平面に透視すると、つぎのようになる。 px=x1/h py=y1/h ただし、h=(z1+vp )/ vp =−xsin(β)/vp+zcos(β)/vp+n/vp+1.0 この透視は2点透視といわれ、最も使われる方法である。β=0のときは単点透視となる。
練習問題59 家のデータを透視で表示(3 View)
例題を参考に、皆さんの描きたい図形データなどを用意して、プログラムを改造し、作品を作りなさい。
1)WordあるいはFrontPageExpress等に、考察、ソースリスト、実行グラフィックス画面を貼り付けたものを「Webページ」の形式(拡張子はhtml)で、各自のMyHomeに、cg_03などの名前をつけて保存する。
あるいは、AZUKIなどを使って、htmlタグを自分で付けてhtmlファイルを作る。paint(*.gif)やword(*.jpg)などを使って圧縮した図は,imgタグでリンクする。こちらの方が、ファイル容量が小さく、テキストエディタで開いたときに、内容が読みやすいので、小生は、こちらの方々で作っている。(小生のWindows98では、paintでのgifファイルが、wordのjpgファイルよりも半分以下と小さくてきれいであった。)
2)情報系Webサーバにindex.htmlからのハイパーリンクを作って、登録する。(注を参照のこと。概略は以下のとおり。))
htmlファイルは、Wordなどで、Webページとして保存する(前述)。そして、ホームページindex.htmlから、今回のレポートページへのリンクを張る。それらを各自のWebサーバのホームディレクトリの直ぐ下のpublic_htmlフォルダ(サブディレクトリ)にftpすること。