今度は, 2次元のベクトル場を手早く矢印で描きたいというときの例題です.
次のプログラム U2D3 は簡単な変形場を描くものですが, サブルーチン
UGVECT 1つを呼ぶだけで十分です. 前節の等高線図の場合と同様に, お
まかせの座標軸を描画したあとで UGVECT ルーチンを呼んでベクトル場
を描いています.
この例でも, 等間隔の格子点を設定して, それぞれの格子点でのベクトルを矢 印で表現します. おまかせ描画のときには, ベクトルの長さが格子点間隔を越 えないようにスケーリングファクターが決定され, それを乗じてベクトルが描 かれます. この場合, x 成分とy 成分のスケーリングファクターは同じに なっていて, 図の下部マージンにはその値が表示されています.
U (実数型) ベクトルのx 成分を与える MU×NYの2次元配列. 作画には NX× NYの部分を使う. MU (整数型) 配列 Uの第1次元整合寸法. V (実数型) ベクトルのy 成分を与える MV× NYの2次元配列. 作画には NX× NYの部分を使う. MV (整数型) 配列 Vの第1次元整合寸法. NX (整数型) 作画に使う配列 U, Vの第1次元寸法. NY (整数型) 作画に使う配列 U, Vの第2次元寸法.
PROGRAM U2D3
PARAMETER( NX=21, NY=21 )
PARAMETER( XMIN=-1, XMAX=1, YMIN=-1, YMAX=1 )
PARAMETER( DX=(XMAX-XMIN)/(NX-1), DY=(YMAX-YMIN)/(NY-1) )
REAL U(NX,NY), V(NX,NY)
*- データ --
DO 10 J=1,NY
DO 10 I=1,NX
X = XMIN + (I-1)*DX
Y = YMIN + (J-1)*DY
U(I,J) = X
V(I,J) = - Y
10 CONTINUE
*- グラフ --
WRITE(*,*) ' WORKSTATION ID (I) ? ;'
CALL SGPWSN
READ (*,*) IWS
CALL GROPN( IWS )
CALL GRFRM
CALL GRSWND( XMIN, XMAX, YMIN, YMAX )
CALL USPFIT
CALL GRSTRF
CALL USSTTL( 'X', 'km', 'Y', 'km' )
CALL USDAXS
CALL UGVECT( U, NX, V, NX, NX, NY )
CALL GRCLS
END
PROGRAM U2D3