.

概要

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

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

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

ユーザー定義関数

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

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

この正変換と逆変換のエントリは,STFTRF の下請けルーチンである STFTRN から呼ばれる. STFUSR に渡ってくる UX, UY の値は, STFRADSTFROT による処理が終った後の値である. 拡大,並行移動は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