%表題   GRPH2 上位グラフィックルーチンライブラリ
%
%履歴
%\Drireki{
%         94/09/30 酒井敏
%         94/10/15 塩谷雅人
%         95/03/22 酒井敏
%        }
%
%-----------------------------------------------------------------------
\section{オートスケーリングルーチン}
\label{gaiyou.auto}

GRPH2 のパッケージには USPACK, UMPACK などのように, 
変換関数のパラメタ (ウィンドウなど) を自動的に決める
パッケージがいくつかある.
これらのパッケージを使うと, 細かなパラメタを気にすることなく, 
与えられたデータをグラフ化することができて便利であるが, 
システムが決めるパラメータが全ての目的に最適である訳ではない. 
パラメタの一部をユーザーが指定することで, 
最終的な図の品質が各段に向上することも少なくない.
\vspace{1em}

このように「一部のパラメタをユーザーが指定する」ことを
可能にするためには, 
システムが「ユーザーがどのパラメタを陽に指定したか」ということを
知る必要がある.
そのために GRPH2 では, 欠損値と同様に「未定義値」を導入する.
この「未定義値」は \GLPGETSET によって管理される {\tt 'RUNDEF'},
{\tt 'IUNDEF'} である.
\vspace{1em}

具体的な手続きとしては, 
\begin{quote}
\begin{description}
  \item [1:] 新しい図を描く前に自動決定可能なパラメタ全てに
            「未定義値」を代入する.
  \item [2:] オートスケーリングルーチンは, 
            「未定義値」になっているパラメタのみを自動的に決定する.
\end{description}
\end{quote}
1 の「未定義値」の代入は GRPACK の{\tt GRFRM}, {\tt GRFIG} を
呼ぶことで行なわれる.
したがて, ユーザーは {\tt SGRFM} の代りに{\tt GRFRM} を呼び, 
オートスケーリングルーチンを呼ぶ前に, 
{\tt GRSWND/SGSWND} などによってパラメタを与えることで
一部のパラメタを陽に指定することができる.
{\tt GRSWND} のように複数のパラメタを同時に指定するルーチンで, 
その中の一部のパラメタだけ陽に指定したい場合には, 
その他のパラメタに{\tt 'RUNDEF'} のあらわす値を代入しておけばよい.
オートスケーリングルーチンは, 
指定されているパラメタによって若干異なる動作をする場合がある.
\vspace{1em}

例えば, 全てをユーザーが指定する 
(オートスケーリングルーチンを使わない) 場合には, 
\begin{Dprogram}
      CALL GROPN(IWS)
      CALL GRFRM

      CALL GRSTRN(ITR)
      CALL GRSVPT(VXMIN, VXMAX, VYMIN, VYMAX)
      CALL GRSWND(UXMIN, UXMAX, UYMIN, UYMAX)

      CALL GRSTRF
      ........
\end{Dprogram}
となるが, 描画したい点の情報から USPACK に適当なパラメタを決めさせたい
場合は, 
\begin{Dprogram}
      CALL GROPN(IWS)
      CALL GRFRM

      CALL GRSTRN(ITR)
      CALL USSPNT(N, UPX, UPY)
      CALL USPFIT

      CALL GRSTRF
      ........
      CALL SGPLU(N, UPX, UPY)
      ........
\end{Dprogram}
となる. 
つまり, {\tt GRSWND}, {\tt GRSVPT} などの代りに, 
これらを決定するための情報を {\tt USSPNT} によって与える. 
必要なパラメタは{\tt USPFIT}が呼ばれることによって決定され, 
{\tt GRSTRF}を呼ばれることによって変換関数が確定する. 
一部のパラメタを陽に指定したい場合は, {\tt GRFRM} と {\tt GRSTRF}
の間で {\tt GRSWND} や {\tt GRSVPT} などを使って指定すればよい.
例えば, 
\begin{Dprogram}
      CALL GROPN(IWS)
      CALL GRFRM

      CALL GRSTRN(ITR)
      CALL GRSWND(UXMIN, UXMAX, RUNDEF, RUNDEF)
      CALL USSPNT(N, UPX, UPY)
      CALL USPFIT

      CALL GRSTRF
      ........
      CALL SGPLU(N, UPX, UPY)
      ........
\end{Dprogram}
とすれば, Y軸の最大最小値のみ自動的に決めることができる.
