DCL:GRPH1:STPACK : 変換メソッド(元関数):概要
     
以下のエントリをユーザー自身が用意することで,     
独自の変換メソッド(元関数)を定義することができる.     
     
     
     
xx, yy = NumRu::DCL.stfusr(ux,uy) 正変換 ux, uy = NumRu::DCL.stiusr(xx,yy) 逆変換 stsusr メソッド(元関数)初期化 
     
この正変換と逆変換のエントリは, stftrf の下請けルーチンである     
stftrn から呼ばれる.     
stfusr に渡ってくる ux, uy の値は,     
stfrad と stfrot による処理が終った後の値である.     
拡大, 並行移動はstftrn が行なうので, これらのメソッド(元関数)は,     
それ以外の基本的な変換メソッド(元関数)を定義するだけで良い.     
変換メソッド(元関数)には正変換と逆変換があるが,     
逆変換を使わない場合には, 逆変換はエントリー文だけで良い.     
     
     
     
     
stsusr は, 変換メソッド(元関数)を確定するsgstrfから呼ばれる.     
このエントリは, 通常sgstrf が行なっている STPACK のメソッド(元関数)を     
初期化しなければならない.     
初期化すべきメソッド(元関数)は,     
ststrf, ststrn, stsrad, stsrot (地図投影の時)     
である.     
     
     
     
次のプログラムは常用対数の log-log 座標を定義するものである.
*--------------------------------------------------------------
*     USER SUPPLIED FUNCTION
*--------------------------------------------------------------
      SUBROUTINE xx, yy = NumRu::DCL.stfusr(ux,uy)
      XX = LOG(UX)
      YY = LOG(UY)
      RETURN
*--------------------------------------------------------------
      ENTRY ux, uy = NumRu::DCL.stiusr(xx,yy)
      UX = EXP(XX)
      UY = EXP(YY)
      RETURN
      END
*--------------------------------------------------------------
      SUBROUTINE stsusr
      vxmin, vxmax, vymin, vymax = NumRu::DCL.sgqvpt()
      uxmin, uxmax, uymin, uymax = NumRu::DCL.sgqwnd()
      CX = (VXMAX-VXMIN)/LOG(UXMAX/UXMIN)
      CY = (VYMAX-VYMIN)/LOG(UYMAX/UYMIN)
      VX0 = VXMIN - CX*LOG(UXMIN)
      VY0 = VYMIN - CY*LOG(UYMIN)
      NumRu::DCL.ststrf(lmapa)
      NumRu::DCL.stsrad(lxdeg,lydeg)
      NumRu::DCL.ststrn(itr,cxa,cya,vxoff,vyoff)
      END
   
次のプログラムは MATH1/MAPLIB の MPFMWL/MPIMWL を使って モルワイデもどきの地図投影メソッド(元関数)を定義するものである.
*---------------------------------------------------------------
*     USER SUPPLIED FUNCTION
*---------------------------------------------------------------
      SUBROUTINE xx, yy = NumRu::DCL.stfusr(ux,uy)
      CALL MPFMWL(UX, UY, XX, YY) 
      RETURN 
*---------------------------------------------------------------
      ENTRY ux, uy = NumRu::DCL.stiusr(xx,yy) 
      CALL MPIMWL(XX, YY, UX, UY) 
      RETURN 
      END 
*---------------------------------------------------------------
      SUBROUTINE stsusr 
      LOGICAL LDEG 
      vxmin, vxmax, vymin, vymax = NumRu::DCL.sgqvpt() 
      simfac, vxoff, vyoff = NumRu::DCL.sgqsim() 
      plx, ply, plrot = NumRu::DCL.sgqmpl() 
      lpara = NumRu::DCL.sglget(cp) 
      IF(LDEG) THEN 
        CP = return_value = NumRu::DCL.rfpi()/180 
      ELSE 
        CP = 1 
      ENDIF 
      rpara = NumRu::DCL.sgrget(cp) 
      rpara = NumRu::DCL.sgrget(cp) 
      rpara = NumRu::DCL.sgrget(cp) 
      rpara = NumRu::DCL.sgrget(cp) 
      CALL SZSCLX(CP*TXMIN, CP*TXMAX) 
      CALL SZSCLY(CP*TYMIN, CP*TYMAX) 
      VX0 = (VXMAX+VXMIN)/2 + XOFF 
      VY0 = (VYMAX+VYMIN)/2 + YOFF 
      NumRu::DCL.ststrf(lmapa) 
      NumRu::DCL.stsrad(lxdeg,lydeg) 
      CALL stsrot(return_value = NumRu::DCL.rfpi() 
      NumRu::DCL.ststrn(itr,cxa,cya,vxoff,vyoff) 
      END