DCL:らくらくDCL:描画の基本(2):ユーザー座標系(U-座標系)での基本描画
   
変換関数を変えることによってさまざまな座標系での描画が可能です. 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な   
らば両対数座標(右下)となります.   
   
   
   
 
   
      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