.

概要

STPACK は座標系の間の変換を受け持つ関数を集めたものである. 座標系の変換は,

の3段階に分けられる.正規化変換はさらに次の変換を含む.

ここで基本変換とは,正規化変換の本質的な部分で, 直角座標系では正規化変換そのものであり, 地図投影座標では座標系回転後の変換 (math1/maplib による変換)である. また,基本変換では角度は常にラジアンで扱われる.

ユーザー定義関数

以下のエントリをユーザー自身が用意することで, 独自の変換関数を定義することができる.

                                    
  STFUSR(UX,UY,XX,YY)   正変換      
                                    
  STIUSR(XX,XY,UX,UY)   逆変換      
                                    
  STSUSR                関数初期化  
                                    

この正変換と逆変換のエントリは,STFTRF の下請けルーチンである STFTRN から呼ばれる. STFUSR に渡ってくる UX, UY の値は, STFRAD と STFROT による処理が終った後の値である. 拡大,並行移動はSTFTRN が行なうので,これらの関数は, それ以外の基本的な変換関数を定義するだけで良い. 変換関数には正変換と逆変換があるが, 逆変換を使わない場合には,逆変換はエントリー文だけで良い.

STSUSR は,変換関数を確定するSGSTRFから呼ばれる. このエントリは,通常SGSTRF が行なっている STPACK の関数を 初期化しなければならない. 初期化すべき関数は, STSTRF, STSTRN, STSRAD, STSROT(地図投影の時) である.

次のプログラムは常用対数の log-log 座標を定義するものである.

*−−−−−−−−−−−−−−−−−−−−−−−-
*     USER SUPPLIED FUNCTION
*−−−−−−−−−−−−−−−−−−−−−−−-
      SUBROUTINE STFUSR(UX, UY, XX, YY)

XX = LOG(UX) YY = LOG(UY)

RETURN *−−−−−−−−−−−−−−−−−−−−−−−- ENTRY STIUSR(XX, YY, UX, UY)

UX = EXP(XX) UY = EXP(YY)

RETURN END *−−−−−−−−−−−−−−−−−−−−−−−- SUBROUTINE STSUSR

CALL SGQVPT(VXMIN, VXMAX, VYMIN, VYMAX) CALL SGQWND(UXMIN, UXMAX, UYMIN, UYMAX)

CX = (VXMAX-VXMIN)/LOG(UXMAX/UXMIN) CY = (VYMAX-VYMIN)/LOG(UYMAX/UYMIN)

VX0 = VXMIN - CX*LOG(UXMIN) VY0 = VYMIN - CY*LOG(UYMIN)

CALL STSTRF(.FALSE.) CALL STSRAD(.FALSE., .FALSE.) CALL STSTRN(99, CX, CY, VX0, VY0)

END

次のプログラムは MATH1/MAPLIB の MPFMWL/MPIMWL を使って モルワイデもどきの地図投影関数を定義するものである.

*−−−−−−−−−−−−−−−−−−−−−−−-
*     USER SUPPLIED FUNCTION
*−−−−−−−−−−−−−−−−−−−−−−−-
      SUBROUTINE STFUSR(UX, UY, XX, YY)

CALL MPFMWL(UX, UY, XX, YY)

RETURN *−−−−−−−−−−−−−−−−−−−−−−−- ENTRY STIUSR(XX, YY, UX, UY)

CALL MPIMWL(XX, YY, UX, UY)

RETURN END *−−−−−−−−−−−−−−−−−−−−−−−- SUBROUTINE STSUSR LOGICAL LDEG

CALL SGQVPT(VXMIN, VXMAX, VYMIN, VYMAX) CALL SGQSIM(SIMFAC, XOFF, YOFF) CALL SGQMPL(PLX, PLY, PLROT) CALL SGLGET('LDEG', LDEG)

IF(LDEG) THEN CP = RFPI()/180 ELSE CP = 1 ENDIF

CALL SGRGET('TXMIN', TXMIN) CALL SGRGET('TXMAX', TXMAX) CALL SGRGET('TYMIN', TYMIN) CALL SGRGET('TYMAX', TYMAX) CALL SZSCLX(CP*TXMIN, CP*TXMAX) CALL SZSCLY(CP*TYMIN, CP*TYMAX)

VX0 = (VXMAX+VXMIN)/2 + XOFF VY0 = (VYMAX+VYMIN)/2 + YOFF

CALL STSTRF(.TRUE.) CALL STSRAD(LDEG, LDEG) CALL STSROT(RFPI()/2-CP*PLY, CP*PLX, CP*PLROT) CALL STSTRN(99, SIMFAC, SIMFAC, VX0, VY0)

END


Back to Main


Latex Source


地球流体電脳倶楽部 : 95/6/9 (Version 5.0)

NUMAGUTI Atusi <a1n@gfdl.gov>
Last Modified: Thu Aug 31 13:06:25 EDT 1995