%表題   ごくらくDCL
%
%履歴
%\Drireki{
%         95/04/13 余田 成男
%        }
%
%\Dchapter{つぎのステップ}
\Dchapterhead

図形を構成する基本要素は, 折れ線とマーカー列です. ($x$,$y$)座標値の配
列とそのデータ数を与えて, 折れ線で結んだり, マーカー列で表示します. い
わゆる,軌跡図や分散図の基本です. 線やマーカーにはそれぞれいくつかの属
性があり, これらを変更すると多種多様な線やマーカーが描けます. 前章のお
まかせルーチン {\tt USGRPH} をいくつかのサブルーチンに分解すると, この
ような変更が容易に行なえます.
\vspace{1em}

グラフ描画の基本要素として, これら二つ以外にも, 文字列を描いたり, 多角
形領域を塗りつぶしたりする機能がありますが, ここでは詳しく述べません.
気になる人は「らくらくDCL」を参考にして下さい.
\vspace{1em}

第\ref{s:step_usgrph}節では「正規化変換」に関する記述が出てきますが,
ちゃんとした説明は次章で行ないます. ここで登場する {\tt USPFIT} と
{\tt GRSTRF} の二つのサブルーチンは, とりあえず「おまじない」と思って
おいてもかまいません.

%-----------------------------------------------------------------------
\section{{\tt USGRPH}の分解}
\label{s:step_usgrph}

第\ref{s:hop_kihonsousa}節のプログラム {\tt HOP} で呼んだ {\tt USGRPH}
サブルーチンがどのようなルーチンで構成されているか, 見ておきましょう.
実は,
\begin{quote}
{\tt
      CALL USGRPH( NMAX, X, Y )
}
\end{quote}
というサブルーチン・コールは, 次の5つのサブルーチンを順に呼ぶことと同
じなのです.
\begin{quote}
{\tt
      CALL USSPNT( NMAX, X, Y ) \\[-1.5mm]
      CALL USPFIT               \\[-1.5mm]
      CALL GRSTRF               \\[-1.5mm]
      CALL USDAXS               \\[-1.5mm]
      CALL UULIN( NMAX, X, Y )
}
\end{quote}
データを自動的にスケーリングするためには, まず, 描きたいデータすべての
なかから最大値と最小値を見つける必要があります.  サブルーチン {\tt
USSPNT} がこれを行ないます. つぎの {\tt USPFIT} では, これらのデータの
最大値・最小値を切りの良い数値に丸めて作画範囲を決め, ほかの「正規化変
換」のパラメータも「おまかせ」で決めます. そして, {\tt GRSTRF} ルーチ
ンで「正規化変換」を確定します. ここで出てきた「正規化変換」については,
第
\ref{s:jump_ntr}節で詳しく説明します. いまは, {\tt USPFIT} と {\tt
GRSTRF} の二つのサブルーチンで, これらの作業を行なっているとだけ認識し
ておいて下さい.
\vspace{1em}

次の {\tt USDAXS} ルーチンは「おまかせ」で座標軸を描くルーチンです. ま
さに「おまかせ」ですから, 引数はありません. そして, {\tt UULIN} ルーチ
ンで折れ線を描いているのです.

\begin{itemize}
\item {\tt USSPNT(N,X,Y)} [作画範囲に含めたいデータの指定] \label{USSPNT}
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt N}          & (整数型) & データ数. \\
      {\tt X}, {\tt Y} & (実数型) & ($x$,$y$)座標値を与える配列.
    \end{tabular}
  \end{quote}

\item {\tt USDAXS} [「おまかせ」で座標軸を描く] \label{USDAXS}
  \begin{quote}
    座標軸の目盛りは4辺とも描かれるが, ラベルやタイトルは左側と下側だ
    けに描かれる. ラベルが長くなる場合には, 自動的にファクターやオフセッ
    トが用いられ, 括弧内に示される. \\
    座標軸のタイトルと単位は, {\tt USSTTL} で設定すれば, それらも描かれる.
  \end{quote}

\item {\tt USPFIT} [「おまかせ」で正規化変換のパラメータを決める]
       \label{USPFIT1}
  \begin{quote}
    第\ref{s:jump_ntr}節参照.
\end{quote}

\item {\tt GRSTRF} [正規化変換の確定] \label{GRSTRF1}
  \begin{quote}
    第\ref{s:jump_ntr}節参照.
  \end{quote}
\end{itemize}


%-----------------------------------------------------------------------
\section{基本概念(2): 折れ線(軌跡図)}
\label{s:step_lime}

次のプログラム {\tt STEP1} では, {\tt UULIN} サブルーチンを用いて4種類
の折れ線を一枚の図に重ね書きしてみましょう. まず, {\tt USSPNT}ルーチン
を4回呼んで {\tt X} と {\tt Y0}, {\tt Y1}, {\tt Y2}, {\tt Y3} のデータ
のなかから $x$ と $y$ の最大値と最小値を見つけ, 「おまかせ」で正規化変
換を確定して, 座標軸も描きます.
\vspace{1em}

さて, 折れ線の描画ですが, 折れ線には, 線種と線の太さの2つの属性があり
ます. {\tt UUSLNT} と {\tt UUSLNI} のサブルーチンでこれらの属性を変更
でき, {\tt UULIN} ルーチンで折れ線を描きます. 属性を陽に変更しなければ,
それぞれの初期値(デフォルト)がそのまま使われます.
\vspace{1em}

このプログラム例では, まず初期値のまま {\tt (X,Y0)} の折れ線を描き, 次
に少し線を太くして, 破線で {\tt (X,Y1)} を, 点線で {\tt (X,Y2)} を, そ
して1点鎖線で {\tt (X,Y3)} を描いています.

\begin{itemize}
\item {\tt UULIN(N,X,Y)} [折れ線を描く]  \label{UULIN}
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt N}          & (整数型) & データ数. \\
      {\tt X}, {\tt Y} & (実数型) & 折れ線を結ぶ点の($x$,$y$)座標値
                                        を与える配列.
    \end{tabular}
  \end{quote}

\item {\tt UUSLNT(ITYPE)} [折れ線の線種の設定] \label{UUSLNT}
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt ITYPE} & (整数型) & 折れ線の線種.
                              1:実線, 2:破線, 3:点線, 4:1点鎖線. (初期値は1)
    \end{tabular}
  \end{quote}

\item {\tt UUSLNI(INDEX)} [折れ線の太さの設定] \label{UUSLNI}
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt INDEX} & (整数型) & 折れ線の太さ.
                               1から大きくなるにつれて太くなる. (初期値は1)
    \end{tabular}
  \end{quote}
\end{itemize}

これらは, 個々のルーチンで属性を決めてから {\tt UULIN} で折れ線を描く,
「根回し型」のルーチン群です. これに対して, ひとつのサブルーチンで属性
も同時に指定して折れ線を描く, 「上意下達型」のルーチン {\tt UULINZ} も
用意されています. 好みの方を使って下さい.

\begin{itemize}
\item {\tt UULINZ(N,X,Y,ITYPE,INDEX)}
      [「上意下達型」で折れ線を描く] \label{UULINZ}
  \begin{quote}
    パラメータは上と同じ.
  \end{quote}
\end{itemize}

\begin{center}
\Depsf[10cm]{step/step1_0001.eps}\\
{\bf step1.f: frame1}\\
\end{center}

\Dproginput{step/step1.f}


%-----------------------------------------------------------------------
\section{基本概念(3): マーカー列(分布図)}
\label{s:step_marker}

前節で紹介した {\tt UULIN} ルーチンのかわりに {\tt UUMRK} を用いると,
データ列をマーカー列で表現でき, いわゆる分布図が描けます. 次のプログラ
ム {\tt STEP2} では, 乱数列をもとに {\tt (X,Y)} のデータをつくり, 分布
図を描きます. 8行めと10行めの関数 {\tt RNGU3(ISEED)} は, DCLの中の「そ
の他の基本関数パッケージ」にある, 一様乱数を生成する関数のひとつです.
このように, DCLにはグラフィクス以外にもさまざまなパッケージが用意され
ていることを心に留めておいて下さい. {\tt USSPNT} でデータの範囲を求め,
{\tt USPFIT} と {\tt GRSTRF} で正規化変換を確定し, {\tt USDAXS} で座標
軸を描き, {\tt UUMRK} を使ってマーカー列を描いています.
\vspace{1em}

ところで, マーカーには, マーカーの種類, 描く線の太さ, マーカーの大きさ
の3つの属性があります. {\tt UUSMKT}, {\tt UUSMKI}, {\tt UUSMKS} の各サ
ブルーチンでこれらの属性を変更できます. これらを呼んで思い通りのマーカー
が選べたら, {\tt UUMRK} ルーチンでマーカー列を描くことになります. また,
同様に「上意下達型」のルーチン {\tt UUMRKZ} もあります.
\vspace{1em}

このプログラム例では, 太い線で初期値の1.5倍の大きさのマーカーを選び,
マーカーの種類は, 最初の25個を初期値の '$\cdot$' で, 次からの25個ずつ
をそれぞれ,' $+$', '$\ast$', '$\circ$' で描いています.

\begin{itemize}
\item {\tt UUMRK(N,X,Y)} [マーカー列を描く] \label{UUMRK}
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt N}          & (整数型) & データ数. \\
      {\tt X}, {\tt Y} & (実数型) & マーカーを打つ点の($x$,$y$)座標値
                                        を与える配列.
    \end{tabular}
  \end{quote}

\item {\tt UUSMKT(ITYPE)} [マーカーの種類の設定] \label{UUSMKT}
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt ITYPE} & (整数型) & マーカーの種類.
                               1:'$\cdot$', 2:'$+$', 3:'$\ast$', 4:'$\circ$',
                               など, フォントテーブル(付録)のDCL文字番号に
                               対応する文字・記号を描く. (初期値は1)
    \end{tabular}
  \end{quote}

\item {\tt UUSMKI(INDEX)} [マーカーを描く線の太さの設定] \label{UUSMKI}
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt INDEX} & (整数型) & マーカーを描く線の太さ.
                               1から順に太くなる. (初期値は1)
    \end{tabular}
  \end{quote}

\item {\tt UUSMKS(RSIZE)} [マーカーの大きさの設定] \label{UUSMKS}
  \begin{quote}

    \begin{tabular}{llp{11cm}}
      {\tt RSIZE} & (実数型) & マーカーの大きさ.
                               V-座標系での値で与える. (初期値は0.01)
    \end{tabular}
  \end{quote}

\item {\tt UUMRKZ(N,X,Y,ITYPE,INDEX,RSIZE)}
      [「上意下達型」でマーカー列を描く] \label{UUMRKZ}
  \begin{quote}
    パラメータは上と同じ.
  \end{quote}
\end{itemize}

ここで, マーカーの大きさで出てきた「V-座標系」について説明しておきましょ
う. 実際に作画できる領域は出力装置によって異なりますが, DCLではそれらに
最大内接する正方形を考えて, 「描画領域」とします. この1辺の長さが1にな
るように規格化した$[0,1] \times [0,1]$の座標系をV-座標系と呼びます.

\Dproginput{step/step2.f}

\begin{center}
\Depsf[10cm]{step/step2_0001.eps}\\
{\bf step2.f: frame1}\\
\end{center}
