%表題   らくらくDCL
%
%%履歴
%\Drireki{
%         95/04/13 余田 成男
%        }
%
%  \Dchapter{地図投影や3次元図形も}
\Dchapterhead
\label{c:map3d}

いま, DCL グラフィクスで精力的に開発・整備されているパッケージに, 地図
投影と3次元グラフィクスがあります. これらのサブルーチンはこれから変更
されていく可能性があるので, ここではいくつかの出力結果を紹介するに留め, 
具体的な解説はいつか将来に致しましょう.
\vspace{1em}

さっそく使ってみたいという人は, GRPH1, GRPH2 のマニュアルの該当すると
ころをお読み下さい. また, この章で示す図は, 
dcl-x.x/demo/rakuraku/map3d/ にサンプルプログラムがあります. また,
dcl-x.x/demo/grph2/umpack と dcl-x.x/demo/grph1/scpack のディレクトリ
にあるテストプログラムなども覗いてみて下さい.
%-----------------------------------------------------------------------
\section{いろいろな地図投影法}

GRPH1 で扱える座標系としては，直角直線座標系などのほかに14種類の地図投
影座標系があります. U-座標系からV-座標系への正規化変換でこれらの座標系
を設定するれば, それぞれの地図座標系で描画が可能となります.
\vspace{1em}

これらの地図投影変換を用いて, 全球(いくつかの例外あり)を表示した結果を
map3d1.f の出力図に示します. 変換関数番号({\tt ITR})が10から33までの14
種類の投影法で海岸線情報と緯度・経度線を描きます. 第1フレームは円筒図
法(6種), 第2フレームは円錐図法(4種), 第3フレーム方位図法(4種)の地図投
影法です.
\vspace{1em}

DCL で指定できる地図情報としては, 海岸線, 国境, 米国の州境, 日本の県境, 
プレート境界などがあります. 
\vspace*{15em}

\begin{center}
\Depsf[15cm]{map3d/map3d1_001.eps}\\
{\bf map3d1.f: frame1}\\
\end{center}
\newpage
\begin{center}
\Depsf[15cm]{map3d/map3d1_002.eps}\\
{\bf map3d1.f: frame2}\\
\end{center}
\newpage
\begin{center}
\Depsf[15cm]{map3d/map3d1_003.eps}\\
{\bf map3d1.f: frame3}\\
\end{center}
\newpage

地図情報や緯線・経線を描くのと同時に, 等高線図やトーンによる塗りわけを
おこなったり, ベクトル場を描いたりすることが可能です.  等高線図作画パッ
ケージ UDPACK とトーンによる塗りわけパッケージ UEPACK はともにU-座標系
で作画するルーチン群ですから, 正規化変換で地図投影変換を指定していても
これまでと全く同じように利用できます. 
\vspace{1em}

プログラム map3d2.f では, これまで描いてきた球面調和関数の重ね合わせを
正射図法で描きます. 第\ref{c:u2d2}章のプログラム {\tt U2D5} と同じよう
に等高線とハッチが地図上で作画され, 地球の裏側の部分は描かれないように
なっています.

\begin{center}
\Depsf[10cm]{map3d/map3d2.eps}\\
{\bf map3d2.f: frame1}\\
\end{center}
\vspace{1em}

ベクトル場作画パッケージ UGPACK はV-座標系上で作画しますから, 残念なが
ら, 現在のところ地図投影には対応していません. しかしながら, SGPACK の
アローサブプリミティブを使って, 緯度・経度の単位を持った矢印を地図上に
描くことは簡単にできます. map3d3.f の例のように, 限られた地域だけでベ
クトル場を描くならば, 緯度・経度の単位で矢印をスケーリングしてもそれほ
ど気にならないでしょう.

\begin{center}
\Depsf[10cm]{map3d/map3d3.eps}\\
{\bf map3d3.f: frame1}\\
\end{center}
\vspace{1em}

%-----------------------------------------------------------------------
\section{3次元透視変換}

3次元透視変換とは, 3次元空間内に置かれた3次元図形を任意の視点から眺め
て2次元平面に投影する変換で, 遠近感が出る変換です. 3次元グラフィクスを
うまく使うと, これまでに見てこなかった新しい表現法が可能となります.
\vspace{1em}

まず, 3次元空間内で三軸に平行に置かれた立方体の表面に, 2次元の作図をし
てみましょう(map3d4.f). 作画する2次元平面をちゃんと指定すれば, これま
での描画サブルーチンがそのまま使えます.
\vspace{1em}

\begin{center}
\Depsf[10cm]{map3d/map3d4.eps}\\
{\bf map3d4.f: frame1}\\
\end{center}
\vspace{1em}

また, GRPH2 のパッケージもそのまま使えます. map3d5.f のプログラムでは, 
第\ref{s:u2d2_w}節で描いた等高線とベクトル場を2段重ねにして表現してみ
ました. 
\vspace{1em}

\begin{center}
\Depsf[10cm]{map3d/map3d5.eps}\\
{\bf map3d5.f: frame1}\\
\end{center}
\vspace{1em}

\newpage
さらに, 3次元空間内で線を引いたり, 面を定義してトーンをつけたりするこ
とも可能です. map3d6.f の図は, これまで何度も描いてきた球面調和関数を
ワイヤフレームで表現するものです. この2次元スカラー場を図示するのに, 
縦横に張ったワイヤの凹凸として3次元的に表現しています. データの値の大
小がワイヤを張った面の高低となって, 視覚的にデータを把握しやすくなりま
す.
\vspace{1em}

\begin{center}
\Depsf[10cm]{map3d/map3d6.eps}\\
{\bf map3d6.f: frame1}\\
\end{center}
