4.1.3 正規化変換の変換関数

変換関数を変えることによってさまざまな座標系での描画が可能です. SGPACK で扱える座標系には, 大別して, 直交直線座標系(1〜4), 直交曲線座標系 (5〜7), 地図投影座標系(10番台〜30番台), ユーザー定義座標系 (99), の4種類があります. 括弧内の数字は変換関数番号です. KIHON8 のプログラム例では, よく使う直交直線座標系の4つを見ておきましょう.

サブルーチン BPLOT では, ビューポートの枠を描き, 一次関数を実線 で, 指数関数を破線で, 対数関数を点線で描き, (X=30,Y=40) を中心に SGTXU で文字列 '(30,40)' を描きます. SGSTRN ルーチン で変換関数番号を1と指定すると,直角一様座標(左上)となります. 2ならばy軸が対数の片対数座標(右上), 3ならばx軸が対数の片対数座標(左下), 4な らば両対数座標(右下)となります.

\resizebox{10cm}{!}{\includegraphics{kihon2/kihon8.eps}}
kihon8.f: frame1

      PROGRAM KIHON8

      PARAMETER( XMIN=1., XMAX=100., YMIN=1., YMAX=100. )

      WRITE(*,*) ' WORKSTATION ID (I)  ? ;'
      CALL SGPWSN
      READ (*,*) IWS

      CALL SGOPN( IWS )
      CALL SGLSET( 'LCLIP', .TRUE. )

      CALL SGFRM
*-- 直角一様座標(左上) ----
      CALL SGSWND( XMIN, XMAX, YMIN, YMAX )
      CALL SGSVPT(  0.1,  0.4,  0.6,  0.9 )
      CALL SGSTRN( 1 )
      CALL SGSTRF

      CALL BPLOT

*-- 片対数(y)座標(右上) ----
      CALL SGSWND( XMIN, XMAX, YMIN, YMAX )
      CALL SGSVPT(  0.6,  0.9,  0.6,  0.9 )
      CALL SGSTRN( 2 )
      CALL SGSTRF

      CALL BPLOT

*-- 片対数(x)座標(左下) ----
      CALL SGSWND( XMIN, XMAX, YMIN, YMAX )
      CALL SGSVPT(  0.1,  0.4,  0.1,  0.4 )
      CALL SGSTRN( 3 )
      CALL SGSTRF

      CALL BPLOT
      
*-- 対数座標(右下) ----
      CALL SGSWND( XMIN, XMAX, YMIN, YMAX )
      CALL SGSVPT(  0.6,  0.9,  0.1,  0.4 )
      CALL SGSTRN( 4 )
      CALL SGSTRF

      CALL BPLOT

      CALL SGCLS

      END
*-----------------------------------------------------------------------
      SUBROUTINE BPLOT

      PARAMETER( NMAX=50 )
      REAL X(NMAX), Y(NMAX)

      CALL SLPVPR( 1 )

*-- 一次関数 ----
      DO 10 N=1,NMAX
        X(N) = 2.*N
        Y(N) = X(N)
   10 CONTINUE

      CALL SGSPLT( 1 )
      CALL SGPLU( NMAX, X, Y )

*-- 指数関数 ----
      DO 20 N=1,NMAX
        Y(N) = EXP(0.05*X(N))
   20 CONTINUE

      CALL SGSPLT( 2 )
      CALL SGPLU( NMAX, X, Y )

*-- 対数関数 ----
      DO 30 N=1,NMAX
        Y(N) = 20.*LOG(X(N))
   30 CONTINUE

      CALL SGSPLT( 3 )
      CALL SGPLU( NMAX, X, Y )

*-- 文字列 ----
      CALL SGSTXS( 0.02 )
      CALL SGTXU( 30., 40., '(30,40)' )

      RETURN
      END

PROGRAM KIHON8