%表題   ごくらくDCL
%
%履歴
%\Drireki{
%         95/04/13 余田 成男
%        }
%
%\Dchapter{おまかせ二次元図}
\Dchapterhead

この章では, 2次元データ$A(x,y)$をグラフ化します. $A$がスカラーなら同じ
値のところを結ぶ等高線図(コンター・プロット)になり, $A$が2次元のベクト
ルならば矢印を用いた「流れ図」となります. これらの場合, 作画範囲
$(x,y)$ は自分で把握できているので, ウインドウは自分で陽に設定し, コン
ターや矢印を「おまかせ」で描くことにします.

%-----------------------------------------------------------------------
\section{等高線図}

格子点で与えられた2次元のスカラーデータを手早く等高線図で描きたいとい
うときには, サブルーチン {\tt UDCNTR} を呼びます({\tt U2D1}). {\tt
UDCNTR} ルーチンは等高線を描くだけですから, まず正規化変換を設定します.
ウインドウは{\tt GRSWND} ルーチンで[{\tt TMIN},{\tt
TMAX}]$\times$[{\tt ZMIN},{\tt ZMAX}]($[0,5]\times[20,50]$)と陽に設定
しますが, ビューポート( $[0.2,0.8]\times[0.2,0.8]$)と変換関数番号(1:
直角一様座標)は括弧内の初期値を用いるので, {\tt USPFIT} ルーチンを呼び,
さらに {\tt GRSTRF} ルーチンでこれらを確定しています.
\vspace{1em}

次に, {\tt USSTTL} ルーチンで座標軸タイトルの情報を与え, {\tt USDAXS}
ルーチンでおまかせの座標軸を描きます.
\vspace{1em}

そして, 最後に {\tt UDCNTR} ルーチンを呼んで等高線を描きます. 現在設定
されているウインドウいっぱいに等間隔の格子点が設定されて,コンタリング
が行なわれます. つまり, 座標軸の目盛に関係なく, {\tt U(1,1)} が左下隅,
{\tt U(NT,NZ)} が右上隅にくるように等間隔の格子点座標が設定されます.
コンターレベルは自動的に決定され, 図の下にそのコンター間隔が表示されま
す. {\tt UDCNTR} の引数の2番目以降で配列の寸法を指定しますが, 第1次元
寸法を2度指定するのは, 配列の一部分だけを作画できるようにするためです.
この例のようにデータ全部を描く場合は, 2番目の引数と3番目の引数を同じ
({\tt NT})にします.

\begin{itemize}
\item {\tt UDCNTR(Z,MX,NX,NY)} [2次元等高線図を描く] \label{UDCNTR}
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt Z} & (実数型) & {\tt MX}$ \times ${\tt NY}の2次元配列.
        作画には{\tt NX}$ \times ${\tt NY}の部分を使う. \\
      {\tt MX} & (整数型) & 配列{\tt Z}の第1次元整合寸法. \\
      {\tt NX} & (整数型) & 作画に使う配列{\tt Z}の第1次元寸法. \\
      {\tt NY} & (整数型) & 作画に使う配列{\tt Z}の第2次元寸法.
    \end{tabular}
  \end{quote}
\end{itemize}

\Dproginput{u2d/u2d1.f}

\begin{center}
\Depsf[10cm]{u2d/u2d1_0001.eps}\\
{\bf u2d1.f: frame1}\\
\end{center}


%-----------------------------------------------------------------------
\section{トーン付き等高線図}

サブルーチン {\tt UETONE} を呼ぶだけで, とりあえず負の領域にトーンをつ
けることができます. 次のプログラム例 {\tt U2D2} は, {\tt U2D1} の結果
に加えて, 負の領域に斜線のハッチをつけます. ここで, 24行めで {\tt
SGLSET} ルーチンを呼んで, トーンに関する論理型内部変数 {\tt 'LSOFTF'}
を {\tt .TRUE.} に設定しています. これを {\tt .FALSE.}(初期値) で描く
と, 出力装置によっては先に描かれた図形が消えてしまうことがあります.
{\tt 'LSOFTF'} の設定を変えたり, {\tt UETONE} を呼ぶ順序を {\tt
USDAXS} の前にしたりして, 結果がどのようになるか確かめてみましょう. ま
た, この例では, ビューポートを陽に設定して長方形にしている点にも注意し
て下さい.
\vspace{1em}

\begin{itemize}
\item {\tt UETONE(Z,MX,NX,NY)} [2次元等値線図の塗り分けを行なう] \label{UETONE}
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt Z} & (実数型) & {\tt MX}$ \times ${\tt NY}の2次元配列.
        作画には{\tt NX}$ \times ${\tt NY}の部分を使う. \\
      {\tt MX} & (整数型) & 配列{\tt Z}の第1次元整合寸法. \\
      {\tt NX} & (整数型) & 作画に使う配列{\tt Z}の第1次元寸法. \\
      {\tt NY} & (整数型) & 作画に使う配列{\tt Z}の第2次元寸法.
    \end{tabular}

    塗り分けの設定を陽に行なわなければ, 負の領域に斜線を引く.
    この塗り分けレベルとパターンの設定は第\ref{s:u2d_multi}節を参照のこと.
  \end{quote}
\end{itemize}

\Dproginput{u2d/u2d2.f}

\begin{center}
\Depsf[10cm]{u2d/u2d2_0001.eps}\\
{\bf u2d2.f: frame1}\\
\end{center}


%-----------------------------------------------------------------------
\section{ベクトル場}

今度は, 2次元のベクトル場を手早く矢印で描きたいというときの例題です.
次のプログラム {\tt U2D3} は簡単な変形場を描くものですが, サブルーチン
{\tt UGVECT} 1つを呼ぶだけで十分です. 前節の等高線図の場合と同様に, お
まかせの座標軸を描画したあとで {\tt UGVECT} ルーチンを呼んでベクトル場
を描いています.
\vspace{1em}

この例でも, 等間隔の格子点を設定して, それぞれの格子点でのベクトルを矢
印で表現します. おまかせ描画のときには, ベクトルの長さが格子点間隔を越
えないようにスケーリングファクターが決定され, それを乗じてベクトルが描
かれます. この場合, $x$ 成分と$y$ 成分のスケーリングファクターは同じに
なっていて, 図の下部マージンにはその値が表示されています.

\begin{itemize}
\item {\tt UGVECT(U,MU,V,MV,NX,NY)} [2次元ベクトル場を描く] \label{UGVECT}
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt U}  & (実数型) & ベクトルの$x$ 成分を与える
                            {\tt MU}$ \times ${\tt NY}の2次元配列.
                            作画には{\tt NX}$ \times ${\tt NY}の部分を使う. \\
      {\tt MU} & (整数型) & 配列{\tt U}の第1次元整合寸法. \\
      {\tt V}  & (実数型) & ベクトルの$y$ 成分を与える
                            {\tt MV}$ \times ${\tt NY}の2次元配列.
                            作画には{\tt NX}$ \times ${\tt NY}の部分を使う. \\
      {\tt MV} & (整数型) & 配列{\tt V}の第1次元整合寸法. \\
      {\tt NX} & (整数型) & 作画に使う配列{\tt U, V}の第1次元寸法. \\
      {\tt NY} & (整数型) & 作画に使う配列{\tt U, V}の第2次元寸法.
    \end{tabular}
  \end{quote}
\end{itemize}

\Dproginput{u2d/u2d3.f}
\vspace{3em}

\begin{center}
\Depsf[10cm]{u2d/u2d3_0001.eps}\\
{\bf u2d3.f: frame1}\\
\end{center}


%-----------------------------------------------------------------------
\section{トーン付き等高線とベクトル場の重ね書き}
\label{s:u2d_multi}
最後にトーン付の等高線図とベクトル場を重ね書きした例を示します({\tt
U2D4}).  {\tt UGVECT}, {\tt UDCNTR}, {\tt UETONE} のサブルーチンを順
に呼んでいます. ここでは, {\tt UESTLV}ルーチンでトーンをつけるレベルと
パターンを指定しています.

\begin{itemize}
\item {\tt UESTLV(TLEV1,TLEV2,IPAT)} [トーンを塗り分けるレベルと
                                      パターンの設定] \label{UESTLV}
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt TLEV1} & (実数型) & 塗り分けるレベルの下限値. \\
      {\tt TLEV2} & (実数型) & 塗り分けるレベルの上限値. \\
      {\tt IPAT}  & (整数型) & トーンパターン番号.
    \end{tabular}
  \end{quote}

\item {\bf トーンパターン番号} [3桁の整数 $ijk$]
  \begin{quote}
    \begin{tabular}{lp{13cm}}
      $i$ & パターンの種類. 0:ドット, 1:横線, 2:斜線(右上がり),
            3:縦線, 4:斜線(左上がり), 5:格子(縦横), 6:格子(斜め). \\
      $j$ & ドットの大きさや斜線の太さ.
            0から5まで値が大きくなるにつれて, ドットは大きく, 線は太くなる. \\
      $k$ & ドットや斜線の密度.
            0から5まで値が大きくなるにつれて, 密度が高くなる. \\
    \end{tabular}
  \end{quote}
\end{itemize}

\Dproginput{u2d/u2d4.f}

\begin{center}
\Depsf[10cm]{u2d/u2d4_0001.eps}\\
{\bf u2d4.f: frame1}\\
\end{center}
