%表題   MAP PROJECT CTRLIB (多分MATH1 に入る)
%
%履歴
%\Drireki{
%         93/02/18 酒井敏
%         94/04/04 塩谷 雅人
%        }
%
%\Dchapter{CTRLIB : 座標変換/回転}
\Dchapterhead
\label{ctrlib}

\section{概要}

  座標変換に関するサブルーチンパッケージ.
  変換する座標系はルーチン名の末尾2文字に略号であらわされる.
  ここで扱う座標系の略号は以下の通り.
  \begin{quote}
    \begin{tabular}{lccc} \hline
                     &  次元  &           英語名         &  略号 \\
      \hline
      直角座標       &   2    &  cartesian coordinates   &  C    \\
      極座標         &   2    &  polar coordinates       &  P    \\
      楕円座標       &   2    &  elliptic coordinates    &  E    \\
%     放物線座標     &   2    &  parabolic coordinates   & (R)   \\
      直角双曲線座標 &   2    & rectangular hyperbolic   &  H    \\
      双極座標       &   2    &  bipolar coordinates     &  B    \\
      直角座標       &   3    &  cartesian coordinates   &  C    \\
      球座標         &   3    &  spherical coordinates   &  S    \\
%      緯度経度座標   &   3    &         ???              &  M    \\
      楕円面座標     &   3    &  ellipsoidal coordinates &  E    \\
      \hline
    \end{tabular}
  \end{quote}
放物線座標との変換は直角双曲線座標の逆変換である.

\vspace{1em}
角度に関する引数の単位はすべてラジアンである.

\section{サブルーチンのリスト}

  \begin{tabular}{lp{10cm}}
    {\tt CT2PC(R,THETA,X,Y)} & 2次元極座標を直角座標に変換する. \\
    {\tt CT2CP(X,Y,R,THETA)} & 直角座標を2次元極座標に変換する. \\
    {\tt CT2EC(U,V,X,Y)}     & 楕円座標を直角座標に変換する. \\
    {\tt CT2BC(U,V,X,Y)}     & 双極座標を直角座標に変換する. \\
    {\tt CT2HC(U,V,X,Y)}     & 直角双曲線座標を直角座標に変換する. \\
    {\tt CT2CH(X,Y,U,V)}     & 直角座標を直角双曲線座標に変換する. \\
    {\tt CT3SC(R,THETA,PHI,X,Y,Z)}
                             & 3次元球面座標を直角座標に変換する. \\
    {\tt CT3CS(X,Y,Z,R,THETA,PHI)}
                             & 直角座標を3次元球面座標に変換する. \\
%    {\tt CT3MC(XLON,YLAT,ZR,X,Y,Z) }
%                             & 緯度経度座標を直角座標に変換する. \\
%    {\tt CT3CM(X,Y,Z,XLON,YLAT,ZR) }
%                             & 直角座標を緯度経度座標に変換する. \\
%    {\tt CT3SM(R,THETA,PHI,XLON,YLAT,ZR) }
%                             & 3次元球面座標を緯度経度座標に変換する. \\
%    {\tt CT3MS(XLON,YLAT,ZR,R,THETA,PHI) }
%                             & 3次元球面座標を緯度経度座標に変換する. \\
  \end{tabular}

  \begin{tabular}{lp{10cm}}
    {\tt CR2C(THETA,X0,Y0,X1,Y1)}  & 2次元直角座標を回転する. \\
    {\tt CR3C(THETA,PHI,PSI,X0,Y0,Z0,X1,Y1,Z1)}
                                    & 3次元直角座標を回転する. \\
    {\tt CR3S(THETA,PHI,PSI,THETA0,PHI0,THETA1,PHI1)}
                                    & 球面座標を回転する. \\
%    {\tt CR3M(DTHE,DPHI,DPSI,XLON0,YLAT0,XLON1,YLAT1)}
%                                    & 緯度経度座標を回転する. \\
  \end{tabular}

\section{サブルーチンの説明}

%--------------------------------------------------------------------
  \subsection{CT2PC/CT2CP}

    \begin{enumerate}
      \item 機能
        \begin{quote}
           2次元極座標と直角座標の変換をする.
        \end{quote}
      \item 呼び出し方法
        \begin{quote}
          {\tt CALL CT2PC(R,THETA,X,Y)} \\
          {\tt CALL CT2CP(X,Y,R,THETA)}
        \end{quote}
      \item パラメーターの説明
        \begin{quote}
          \begin{tabular}{llp{10cm}}
            {\tt X,Y}     & {\tt (R)} & 直角座標.\\
            {\tt R,THETA} & {\tt (R)} & 極座標.
          \end{tabular}
        \end{quote}
      \item 備考
        \begin{enumerate}
           \item 定義式

              \begin{minipage}{8cm}
              \begin{eqnarray*}
                 x & = & r \cos(\theta) \\
                 y & = & r \sin(\theta) \\
              \end{eqnarray*}
              \end{minipage}

%         \item 角度の単位はラジアンである.
        \end{enumerate}
    \end{enumerate}

%--------------------------------------------------------------------
  \subsection{CT2EC}

    \begin{enumerate}
      \item 機能
        \begin{quote}
           楕円座標と直角座標の変換をする.
        \end{quote}
      \item 呼び出し方法
        \begin{quote}
          {\tt CALL CT2EC(U,V,X,Y)}
        \end{quote}
      \item パラメーターの説明
        \begin{quote}
          \begin{tabular}{llp{10cm}}
            {\tt X,Y}     & {\tt (R)} & 直角座標.\\
            {\tt U,V}     & {\tt (R)} & 楕円座標. \\
          \end{tabular}
        \end{quote}
      \item 備考
        \begin{enumerate}
           \item 定義式

              \begin{minipage}{8cm}
              \begin{eqnarray*}
                 x & = &  \cosh(u)\cos(v) \\
                 y & = &  \sinh(u)\sin(v) \\
              \end{eqnarray*}
              \end{minipage}

        \end{enumerate}
    \end{enumerate}

%--------------------------------------------------------------------
  \subsection{CT2BC}

    \begin{enumerate}
      \item 機能
        \begin{quote}
           双極座標と直角座標の変換をする.
        \end{quote}
      \item 呼び出し方法
        \begin{quote}
          {\tt CALL CT2BC(U,V,X,Y)}
        \end{quote}
      \item パラメーターの説明
        \begin{quote}
          \begin{tabular}{llp{10cm}}
            {\tt X,Y}     & {\tt (R)} & 直角座標.\\
            {\tt U,V}     & {\tt (R)} & 双極座標. \\
          \end{tabular}
        \end{quote}
      \item 備考
        \begin{enumerate}
           \item 定義式

              \begin{minipage}{8cm}
              \begin{eqnarray*}
                 x & = &  \frac{\sinh(v)}{\cosh(v) + \cos(u)} \\
                 y & = &  \frac{\sin (u)}{\cosh(v) + \cos(u)} \\
              \end{eqnarray*}
              \end{minipage}

           \item $ \cosh(v) + \cos(u) = 0 $のとき, 内部変数
             {\tt 'RUNDEF'}で決まる不定を示す値(初期値は-999)を返す.
        \end{enumerate}
    \end{enumerate}

%--------------------------------------------------------------------
  \subsection{CT2HC/CT2CH}

    \begin{enumerate}
      \item 機能
        \begin{quote}
           直角双曲線座標と直角座標の変換をする.
        \end{quote}
      \item 呼び出し方法
        \begin{quote}
          {\tt CALL CT2HC(U,V,X,Y)} \\
          {\tt CALL CT2CH(X,Y,U,V)}
        \end{quote}
      \item パラメーターの説明
        \begin{quote}
          \begin{tabular}{llp{10cm}}
            {\tt X,Y}     & {\tt (R)} & 直角座標.\\
            {\tt U,V}     & {\tt (R)} & 直角双曲線座標. \\
          \end{tabular}
        \end{quote}
      \item 備考
        \begin{enumerate}
           \item 定義式

              \begin{minipage}{8cm}
              \begin{eqnarray*}
                 u & = & x^2 - y^2 \\
                 v & = & 2xy \\
              \end{eqnarray*}
              \end{minipage}

           \item {\tt X,Y} と{\tt U,V} を入れ換えると,
                 放物線座標と直角座標の変換となる.
        \end{enumerate}
    \end{enumerate}

%-------------------------------------------------------------------
  \subsection{CT3CS/CT3SC}

    \begin{enumerate}
      \item 機能
        \begin{quote}
            3次元球面座標と直角座標の変換をする.
        \end{quote}
      \item 呼び出し方法
        \begin{quote}
          {\tt CALL CT3SC(R,THETA,PHI,X,Y,Z)} \\
          {\tt CALL CT3CS(X,Y,Z,R,THETA,PHI)}
        \end{quote}
      \item パラメーターの説明
        \begin{quote}
          \begin{tabular}{llp{10cm}}
            {\tt X,Y,Z}        & {\tt (R)} & 直角座標.\\
            {\tt R,THETA,PHI}  & {\tt (R)} & 極座標.
          \end{tabular}
        \end{quote}
      \item 備考
        \begin{enumerate}
           \item 定義式

              \begin{minipage}{8cm}
              \begin{eqnarray*}
                 x & = & r \sin(\theta) \cos(\varphi) \\
                 y & = & r \sin(\theta) \sin(\varphi) \\
                 z & = & r \cos(\theta)               \\
              \end{eqnarray*}
              \end{minipage}

%         \item 角度の単位はラジアンである.
        \end{enumerate}
    \end{enumerate}

%-------------------------------------------------------------------
  \subsection{CR2C}

    \begin{enumerate}
      \item 機能
        \begin{quote}
           2次元直角座標を回転する.
        \end{quote}
      \item 呼び出し方法
        \begin{quote}
          {\tt CALL CR2C(THETA,X0,Y0,X1,Y1)}
        \end{quote}
      \item パラメーターの説明
        \begin{quote}
          \begin{tabular}{llp{10cm}}
            {\tt THETA}  & {\tt (R)} & 回転角. \\
            {\tt X0,Y0} & {\tt (R)} & 回転前の座標値.\\
            {\tt X1,Y1} & {\tt (R)} & 回転後の座標値.
          \end{tabular}
        \end{quote}
      \item 備考
        \begin{enumerate}
           \item 定義式

              \begin{minipage}{8cm}
              \begin{eqnarray*}
                 x_1 & = &  \cos(\theta) x_0 + \sin(\theta) y_0 \\
                 y_1 & = & -\sin(\theta) x_0 + \cos(\theta) y_0 \\
              \end{eqnarray*}
              \end{minipage}

%         \item 角度の単位はラジアンである.
        \end{enumerate}
    \end{enumerate}

%-------------------------------------------------------------------
  \subsection{CR3C}

    \begin{enumerate}
      \item 機能
        \begin{quote}
           3次元直角座標を回転する.
        \end{quote}
      \item 呼び出し方法
        \begin{quote}
          {\tt CALL CR3C(THETA,PHI,PSI,X0,Y0,Z0,X1,Y1,Z1)}
        \end{quote}
      \item パラメーターの説明
        \begin{quote}
          \begin{tabular}{llp{10cm}}
            {\tt THETA,PHI,PSI} & {\tt (R)} & Euler の回転角
                                  ($\theta$, $\varphi$, $\psi$). \\
            {\tt X0,Y0,Z0}      & {\tt (R)} & 回転前の座標値. \\
            {\tt X1,Y1,Z1}      & {\tt (R)} & 回転後の座標値. \\
          \end{tabular}
        \end{quote}
      \item 備考
        \begin{enumerate}
           \item 定義式
              \begin{displaymath}
                 \pmatrix{ x_1 \cr y_1 \cr z_1 } =
                 \pmatrix{  \cos\varphi \cos\theta \cos\psi
                          - \sin\varphi \sin\psi,           &
                            \sin\varphi \cos\theta \cos\psi
                          + \cos\varphi \sin\psi,           &
                          - \sin\theta  \cos\psi            \cr
                          - \cos\varphi \cos\theta \sin\psi
                          - \sin\varphi \cos\psi,           &
                          - \sin\varphi \cos\theta \sin\psi
                          + \cos\varphi \cos\psi,           &
                            \sin\theta  \sin\psi            \cr
                            \cos\varphi \sin\theta,         &
                            \sin\varphi \sin\theta,         &
                            \cos\theta                        }
                 \pmatrix{ x_0 \cr y_0 \cr z_0 }
              \end{displaymath}
%         \item 角度の単位はラジアンである.
          \item Euler の角 ($\theta$, $\varphi$, $\psi$) で回転させる
                とは, z軸の回りに $\varphi$ 回転させ,
                y軸の回りに $\theta$ 回転させた後に,
                z軸の回りに $\psi$ 回転させるのに等しい.
	  \item Euler の角については, 数学辞典などを参照のこと.
          \item 座標軸ではなく, 座標値を($\theta$, $\varphi$, $\psi$)だけ
                回転させるには \\
                {\tt CALL CR3C(-THETA,-PSI,-PHI,X0,Y0,Z0,X1,Y1,Z1)}
                とする.
        \end{enumerate}
    \end{enumerate}

%-------------------------------------------------------------------
  \subsection{CR3S}

    \begin{enumerate}
      \item 機能
        \begin{quote}
           球面座標を回転する.
        \end{quote}
      \item 呼び出し方法
        \begin{quote}
          {\tt CALL CR3S(THETA,PHI,PSI,THETA0,PHI0,THETA1,PHI1)}
        \end{quote}
      \item パラメーターの説明
        \begin{quote}
          \begin{tabular}{llp{10cm}}
            {\tt THETA,PHI,PSI} & {\tt (R)} & Euler の回転角
                                  ($\theta$, $\varphi$, $\psi$). \\
            {\tt THETA0,PHI0}      & {\tt (R)} & 回転前の座標値. \\
            {\tt THETA1,PHI1}      & {\tt (R)} & 回転後の座標値. \\
          \end{tabular}
        \end{quote}
      \item 備考
        \begin{enumerate}
%         \item 角度の単位はラジアンである.
          \item なし.
        \end{enumerate}
    \end{enumerate}

