%表題   基本グラフィックルーチンライブラリ
%
%履歴
%\Drireki{
%         94/02/16 酒井敏
%        }
%
\section{サブルーチンのリスト}

\subsubsection{座標変換}
\begin{quote}
  \begin{tabular}{ll}
      {\tt STFTRF(UX,UY,VX,VY)} & 正規化変換			\\
      {\tt STFTR3(UX,UY,UZ,VX,VY,VZ)} & 3次元正規化変換		\\
      {\tt STFPR2(VX,VY,RX,RY)} & 二次元透視変換.		\\
      {\tt STFPR3(VX,VY,VZ,RX,RY)} & 三次元透視変換.		\\
      {\tt STFWTR(RX,RY,WX,WY)} & ワークステーション変換.	\\
				&				\\
      {\tt STSTRF(LMAP)}	& 正規化変換パラメタ設定.	\\
      {\tt STSPR2(IX,IY,SECT)}  & 二次元透視変換パラメタ設定.	\\
      \multicolumn{2}{l}{%
      {\tt STSPR3(XFC,YFC,ZFC,THETA,PHI,PSI,FAC,ZVIEW,RXOFF,RYOFF)}
      } \\
				& 三次元透視変換パラメタ設定.	\\
      \multicolumn{2}{l}{%
      {\tt STSWTR (RXMIN,RXMAX,RYMIN,RYMAX,WXMIN,WXMAX,WYMIN,WYMAX,IWTRF)}
      } \\
 				& ワークステーション変換パラメタ設定.\\
  \end{tabular}
  \vspace{1em}

  この他に, ルーチン名の3文字めが{\tt I} の逆変換,
  {\tt Q} のパラメタ問い合わせルーチンがある.

\end{quote}

%-----------------------------------------------------------------------
\subsubsection{下請けルーチン}

\begin{quote}
  \begin{tabular}{ll}
      {\tt STFTRN(UX,UY,VX,VY)} 	& 基本変換. \\
      {\tt STSTRN(ITR,CXA,CYA,VX0,VY0)}	& 基本変換パラメタ設定. \\
      {\tt STFROT(UX,UY,TX,TY)}		& 地図座標の回転.\\
      {\tt STSROT(THETA,PHI,PSI)}	& 地図座標の回転パラメタ設定.\\
      {\tt STFRAD(UX1,UY1,UX2,UY2)}	& 角度の単位変換.\\
      {\tt STSRAD(LXDEG,LYDEG)}		& 角度の単位変換パラメタ設定.\\
  \end{tabular}
  \vspace{1em}

  この他に, ルーチン名の3文字めが{\tt I} の逆変換,
  {\tt Q} のパラメタ問い合わせルーチンがある.

\end{quote}

%-----------------------------------------------------------------
\section{サブルーチンの説明 : 座標変換}


%-----------------------------------------------------------------------
\subsection{STFTRF/STITRF/STSTRF/STQTRF}
\begin{enumerate}
  \item 機能
      \begin{quote}
        正規化変換 (UCとVCの変換) を行なう.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL STFTRF(UX,UY,VX,VY)} \\
      {\tt CALL STITRF(VX,VY,UX,UY)} \\
      {\tt CALL STSTRF(LMAP)} \\
      {\tt CALL STQTRF(LMAP)}
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{9cm}}
      {\tt UX,UY} & {\tt (R)}    & UC の 座標   \\
      {\tt VX,VY} & {\tt (R)}    & VC の 座標   \\
      {\tt LMAP}  & {\tt (L)}    & 地図投影関数であることを示すフラグ.   \\
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item この関数は, その中で{\tt STFRAD}, {\tt STFROT},
              {\tt STFTRN} を呼ぶ.
	\item {\tt LFLAG=.TRUE.} の時, {\tt STFROT} で座標回転を行なっ
		てから, {\tt STFTRN} を呼ぶ.
        \item 地図投影の際に特異点などで変換不能の場合は,
              \GLPGETSET が管理する内部変数{\tt RUNDEF}の示す
              値(初期値は $-999.0$)を返す.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------
\subsection{STFPR2/STIPR2/STSPR2}
\begin{enumerate}
  \item 機能
      \begin{quote}
        二次元透視変換を行なう.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL STFPR2(VX,VY,RX,RY)} \\
      {\tt CALL STIPR2(RX,RY,VX,VY)} \\
      {\tt CALL STSPR2(IX,IY,SECT)}
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{9cm}}
      {\tt VX,VY} & {\tt (R)}    & VC の座標   \\
      {\tt RX,RY} & {\tt (R)}    & RC の座標  \\
      {\tt IX,IY} & {\tt (I)}    & 2次元のX軸とY軸を, 3次元のどの軸に
				対応させるか, 番号で指定する.
				(1:X軸, 2:Y軸, 3:Z軸)
				負の値を指定すると, 逆向きに対応させる.\\
      {\tt SECT} & {\tt (R)}    & 2次元平面と交わる座標軸の交点座標.

      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item 透視変換のパラメタは三次元透視変換と共通である.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------
\subsection{STFTR3}
\begin{enumerate}
  \item 機能
      \begin{quote}
        3次元正規化変換 (UC3とVC3の変換) を行なう.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL STFTR3(UX,UY,UZ,VX,VY,VZ)} \\
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{9cm}}
      {\tt UX,UY,UZ} & {\tt (R)}    & UC の 座標   \\
      {\tt VX,VY,VZ} & {\tt (R)}    & VC の 座標   \\
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
	なし.
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------
\subsection{STFPR3/STIPR3/STSPR3}
\begin{enumerate}
  \item 機能
      \begin{quote}
        三次元透視変換を行なう.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL STFPR3(UX,UY,UZ,RX,RY)} \\
      {\tt CALL STSPR3(XFC,YFC,ZFC,THETA,PHI,PSI,FAC,ZVIEW,RXOFF,RYOFF)}
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{9cm}}
      {\tt UX,UY,UZ}      & {\tt (R)}    & UC の座標   \\
      {\tt RX,RY}         & {\tt (R)}    & RC の座標 \\
      {\tt ITR3}          & {\tt (I)}    & 変換関数番号 \\
      {\tt XFC,YFC,ZFC}   & {\tt (R)}    & 焦点中心の座標 \\
      {\tt THETA,PHI,PSI} & {\tt (R)}    & 回転角 \\
      {\tt FAC}           & {\tt (R)}    & 拡大縮小ファクター \\
      {\tt ZVIEW}         & {\tt (R)}    & 視点のZ座標 \\
      {\tt RXOFF,RYOFF}   & {\tt (R)}    & オフセット
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item この関数は以下の操作をする.
	  \begin{itemize}
		\item 焦点中心を原点に並行移動する.
		\item 原点を中心に {\tt (THETA,PHI,PSI)} 回転する.
		\item 座標値を{\tt FAC} 倍する.
		\item {\tt (0,0,ZVIEW)} を視点として,
			X--Y平面に投影する.
		\item 投影された座標値に {\tt (RXOFF,RYOFF)} を加える.
	    \end{itemize}
      \end{enumerate}
      \end{quote}

\end{enumerate}
%-----------------------------------------------------------------------
\subsection{STFWTR/STWTR/STSWTR/STQWTR}
\begin{enumerate}
  \item 機能
      \begin{quote}
        ワークステーション変換を行なう.
      \end{quote}

  \item 呼び出し方法
    \begin{quote}
    {\tt CALL STFWTR(RX,RY,WX,WY)} \\
    {\tt CALL STIWTR(WX,WY,RX,RY)} \\
    {\tt CALL STSWTR(RXMIN,RXMAX,RYMIN,RYMAX,WXMIN,WXMAX,WYMIN,WYMAX,IWTRF)} \\
    {\tt CALL STQWTR(RXMIN,RXMAX,RYMIN,RYMAX,WXMIN,WXMAX,WYMIN,WYMAX,IWTRF)}
    \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{9cm}}
      {\tt RX,RY} & {\tt (R)}    & RC の座標   \\
      {\tt WX,WY} & {\tt (R)}    & WC の座標   \\
      {\tt RXMIN,RXMAX,RYMIN,RYMAX}
                  & {\tt (R)} & ワークステーションウインドウ. \\
      {\tt WXMIN,WXMAX,WYMIN,WYMAX}
                  & {\tt (R)} & ワークステーションビューポート. \\
      {\tt IWTRF} & {\tt (I)}    & 変換番号.
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item なし.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------
\section{サブルーチンの説明 : 座標変換 (下請け) }

以下の関数は, {\tt STFTRF/STITRF} から呼ばれるルーチンである.
これらの関数の初期化は, 通常{\tt SGSTRF} によって行なわれる.
ユーザー定義関数を使う場合は, ユーザー自身がこれらのルーチンを初期化す
る必要がある.
\vspace{1em}

%-----------------------------------------------------------------------
\subsection{STFTRN/STITRN/STSTRN}
\begin{enumerate}
  \item 機能
      \begin{quote}
        正規化変換 (UCとVCの変換) または地図投影 (TCとVCの変換)を行なう.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL STFTRN(UX,UY,VX,VY)} \\
      {\tt CALL STITRN(VX,VY,UX,UY)} \\
      {\tt CALL STSTRN(ITR,CXA,CYA,VX0,VY0)}
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{9cm}}
      {\tt UX,UY}       & {\tt (R)}    & UC/TC の 座標   \\
      {\tt VX,VY}       & {\tt (R)}    & VC の 座標   \\
      {\tt ITR}         & {\tt (I)}    & 変換関数番号   \\
      {\tt CXA,CYA}     & {\tt (R)}    & 座標値にかけるファクター   \\
      {\tt VX0,VY0}     & {\tt (R)}    & VC における原点の位置
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item ITR については \ref{gaiyou.ntrf2}節を参照.
        \item 地図投影の際に特異点などで変換不能の場合は,
              \GLPGETSET が管理する内部変数{\tt RUNDEF}の示す
              値(初期値は $-999.0$)を返す.
        \item {\tt STITRN} は {\tt ITR = 6} ではエラーとなる.
        \item この関数は以下の操作をする.
	  \begin{itemize}
		\item 変換数番号にしたがって,
			{\tt (UX,UY)} を基本的な変換をして {\tt (XX,YY)}
			とする.
		\item さらに次式により, 拡大, 移動を行なう.
			\begin{quote}
			 {\tt VX = CXA*XX + VX0} \\
			 {\tt VY = CYA*XX + VY0} \\
			\end{quote}
	    \end{itemize}
        \item 地図投影法に属する変換{\tt (10 <= ITR < 40)}の場合、
              {\tt STFTRN} および {\tt STITRN}の
              内部では {\tt MAPLIB} ({\tt MATH1} 参照)のサブルーチンが
              同じ引数をもって呼び出される.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------
\subsection{STFROT/STIROT/STSROT}
\begin{enumerate}
  \item 機能
      \begin{quote}
        地図座標の回転を行なう.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL STFROT(UX,UY,TX,TY)} \\
      {\tt CALL STIROT(TX,TY,UX,UY)} \\
      {\tt CALL STSROT(THETA,PHI,PSI)}
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{9cm}}
      {\tt UX,UY} & {\tt (R)}         & UC の座標   \\
      {\tt TX,TY} & {\tt (R)}         & TC の座標   \\
      {\tt THETA,PHI,PSI} & {\tt (R)} & 回転角
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item なし.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------
\subsection{STFRAD/STIRAD/STSRAD}
\begin{enumerate}
  \item 機能
      \begin{quote}
        角度の単位変換を行なう.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL STFRAD(UX1,UY1,UX2,UY2)} \\
      {\tt CALL STIRAD(UX2,UY2,UX1,UY1)} \\
      {\tt CALL STSRAD(LXDEG,LYDEG)}
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{9cm}}
      {\tt UX1,UY1}     & {\tt (R)}    & UC の座標   \\
      {\tt UX2,UY2}     & {\tt (R)}    & UC の座標 (常にラジアン) \\
      {\tt LXDEG,LYDEG} & {\tt (L)}    & {\tt UX1,UY1} の単位が,
					「度」であることを示すフラグ.
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item なし.
      \end{enumerate}
      \end{quote}

\end{enumerate}
%-----------------------------------------------------------------------


