%表題   らくらくDCL
%
%履歴
%\Drireki{
%         95/04/13 余田 成男
%        }
%
%\Dchapter{とりあえず使ってみよう}
\Dchapterhead
\label{c:quick}

DCLグラフィクスではサブルーチンを数行呼ぶだけで, 折れ線図や等高線図, 2
次元ベクトル場などの作図が可能です. とりあえず, 気楽に使ってみましょう.

%-----------------------------------------------------------------------
\section{とりあえず折れ線}
\label{s:quick_line}

データ解析でも数値計算でも一刻も早く計算結果が見たいものです. 面倒な
{\tt FORMAT} を考えて, {\tt WRITE} 文でたくさんの数字列をアウトプット
して, それをじっくり眺めて$\cdots$というようなことをやっていた時代もそ
んなに昔のことではないのですが, そんな時, DCLを用いるとわずか数行でデー
タをグラフ化できます.
\vspace{1em}

まず, 例題として, カオスを生み出す簡単なロジスティク模型を考えてみましょ
う.
\begin{equation}
   y_{n+1} = r y_{n} (1-y_{n}).
\end{equation}
$r > r_{\infty} = 3.5700$ でカオス解となりますが, 次のFORTRANプログラム
{\tt QUICK1} は, パラメータ $r = 3.7$, 初期値 $y_{0} = 0.5$ として,
$y_{50}$ まで求めて, グラフ化しようというものです. 今は「おまじない」
である {\tt GROPN} 等を含めても14行めからの4行で, 自動的にスケールを決
めて作図してくれます.

\Dproginput{quick/quick1.f}
\vspace{1em}

UNIX システムで DCL が標準的にインストールされている場合には,
\begin{quote}
{\tt
\% dclfrt -o quick1 quick1.f
}
\end{quote}
によって {\tt quick1} という実行ファイルが作られます. X ウインドウシス
テムが起動されている状態で
\begin{quote}
{\tt
\% quick1
}
\end{quote}
といれると, ウインドウがひとつ現れて, ウインドウの位置を確定すると描画
がはじまり, 下のようなグラフが得られます. このとき, 次の警告メッセージ
が出ることが多いと思いますが, 特に気にする必要はありません.
\begin{quote}
{\tt
 *** WARNING (STSWTR) ***  WORKSTATION VIEWPORT WAS MODIFIED.
}
\end{quote}
図形表示の終了はマウスクリックで行ないます.
\vspace{1em}

\begin{center}
\Depsf[10cm]{quick/quick1+_0001.eps}\\
{\bf quick1.f: frame1}\\
\end{center}

「おまじない」の{\tt GROPN} および {\tt GRFRM} サブルーチンで図形出力
装置を準備し, 作画領域を設定します. 実際にスケーリングを行なって折れ線
や座標軸を描いたのは, 自動スケーリングパッケージ USPACK のなかの {\tt
USGRPH} というサブルーチンです. このサブルーチンは, $(x,y)$座標のデー
タとその個数({\tt NMAX+1})を与えると, それらを実線で結んでプロットしま
す. 描画終了の「おまじない」が {\tt GRCLS} ルーチンです. これらの「お
まじない」については, 第\ref{c:kihon1}, \ref{c:uspack}章で説明します.
\vspace{1em}

つぎに, {\tt USGRPH} ルーチンの自動スケーリング機能の実力を示すために,
プログラム{\tt QUICK2} で意地の悪いデータを与えて作図してみましょう.

\Dproginput{quick/quick2.f}
\vspace{1em}

この例ではデータの変動幅が極端なのですが, 結果はどうでしょうか. $x$軸
のラベルが重なったり, $y$軸に1.00005というような不細工なラベルを付けて,
それが描画範囲を越えてしまったりという様なことは起こりません. 与えられ
たデータから適当な目盛間隔やラベルの間隔を求めて座標軸を描いているので
すが, ラベルの文字数が大きすぎる場合には,この例のようにファクター値
($10^{4}, 10^{-5}$)やオフセット値(1)を適当に選んで軸の端に表示し, ラベ
ルが適当な文字数以内におさまるようにします.
\vspace{1em}

\begin{center}
\Depsf[10cm]{quick/quick2_0001.eps}\\
{\bf quick2.f: frame1}\\
\end{center}

{\tt QUICK2} のグラフ部分では15行めからの3行が増えていますが, これで図
形の出力先を実行時に決められるようになります. 実行ファイルを作りこれを
実行すると, 標準的な場合には
\begin{quote}
{\tt
WORKSTATION ID (I) ? ; \\
1:X, 2:PS, 3:Tek, 4:Gtk ;
}
\end{quote}
ときいてきます. GRPH1 のサブルーチン {\tt SGPWSN} を呼んで, 今の環境で
利用可能な「ワークステーション名」のリストを書き出しています. この場合,
3つの出力先が可能で, X ウインドウシステムが起動されている状態で1を入力
すると, {\tt QUICK1} の例と同様にウインドウが現れます. 一方, 2 (PS)を
指定すると, カレントディレクトリに dcl.ps というポストスクリプトファイ
ルができます. そこで,
\begin{quote}
{\tt
\% lpr dcl.ps
}
\end{quote}
と入力すれば, ポストスクリプトプリンタに結果が出力されます. また, 3
(Tek)を指定するとテクトロ端末で描画ができます.4(Gtk)を指定すると,
画面の描画にGtkライブラリを使用します.
\vspace{1em}

自動スケーリング機能の USPACK サブルーチンを使って, さらに手のこんだ1
次元データの作図が可能です. それは, 第\ref{c:uspack}章で説明することに
しましょう.

%-----------------------------------------------------------------------
\section{とりあえず等高線図}
\label{s:quick_con}

2次元のスカラー場を手早くコンタリングして見たいというときには, 等高線
描画パッケージ UDPACK にあるサブルーチン {\tt UDCNTR} を1つ呼ぶだけで
十分です. 例題として, 球面調和関数の重ね合わせ
$ P^{1}_{2}(\sin \phi)\exp (i \lambda) - P_{2}(\sin \phi) $
の実部を描いてみましょう({\tt QUICK3}).

\Dproginput{quick/quick3.f}

\begin{center}
\Depsf[10cm]{quick/quick3_0001.eps}\\
{\bf quick3.f: frame1}\\
\end{center}

{\tt UDCNTR} は等高線図を描くだけで, 枠や座標軸を描いてくれませんから,
この例ではまず, いくつかの「おまじない」({\tt GRSWND}, {\tt GRSVPT},
{\tt GRSTRN}, {\tt GRSTRF})で座標系を決め, USPACKのルーチン {\tt
USDAXS} を使っておまかせの座標軸を描画したのちに, {\tt UDCNTR} を呼ん
で等高線図を描いています.
\vspace{1em}

{\tt UDCNTR} の引数は, 最初の{\tt P} が作画しようとする場を与える2次元
配列, 2番目の{\tt NX} が実際に宣言した配列の第1次元寸法, 3, 4番目の
{\tt NX}, {\tt NY} がそれぞれ, 作画に使う配列の第1次元および第2次元寸
法です. この例のように, 宣言した配列をフルに用いて作画するときは, 2番
目と3番目の引数は同じになりますが, 第1次元目の寸法をこのように2つの引
数で指定するといいことがあります. その利点は第\ref{s:u2d1_bubun}節で説
明します.
\vspace{1em}

この例のように {\tt UDCNTR} だけを呼ぶ場合には, 等間隔の格子点を設定し
てコンタリングを行ないます. つまり, 座標軸の目盛に関係なく, {\tt
P(1,1)} が左下隅, {\tt P(NX,NY)} が右上隅にくるような等間隔の格子点座
標が設定されます. また, コンターレベルも自動的に決定されて, 図の下にそ
のコンター間隔が表示されます.
\vspace{1em}

GRPH1 の ユーザーインターフェイス SGPACK には, 折れ線を描いたり文字列
を描いたりする機能の他にも, 多角形閉領域のぬりつぶしを行なう機能があり
ます.  UEPACK はこれに対応するトーンぬりつぶしの上位ルーチンですが,
{\tt QUICK3} の例で {\tt UETONE} サブルーチンを1つ呼ぶだけで, とりあえ
ず負の領域に斜線のハッチをつけることができます({\tt QUICK4}). ここで
{\tt UETONE} を呼ぶのが31行めで, 座標軸やコンターを描くよりも前である
ことに注意しておきましょう. これらの順序を変えると, 出力装置によっては
結果が異なります. それまでに描いた部分がぬりつぶされ消されてしまうこと
があるのです. この点については, 第\ref{s:kihon1_ton}節, 第
\ref{s:u2d2_ton}節で詳しく説明します.
\vspace{1em}

UDPACK や UEPACK, UWPACK の諸機能を使うことによって, 高度な等高線図が
描けるようになります. カラーグラフィクスが利用できる環境では, このよう
な等高線図を色の塗り分け(カラー グラデーション)で表現することも可能に
なります. これらは, 第\ref{c:u2d1}, \ref{c:u2d2}, \ref{c:color}章で説
明することにしましょう.

\Dproginput{quick/quick4.f}
\vspace*{3em}

\begin{center}
\Depsf[10cm]{quick/quick4_0001.eps}\\
{\bf quick4.f: frame1}\\
\end{center}

%-----------------------------------------------------------------------
\section{とりあえず2次元ベクトル場}

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

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

ベクトル場も UGPACK のルーチンを使うことによって高度な作図ができるよ
うになります. これも第\ref{c:u2d2}章で説明することにしましょう.

\Dproginput{quick/quick5.f}

\begin{center}
\Depsf[10cm]{quick/quick5_0001.eps}\\
{\bf quick5.f: frame1}\\
\end{center}
