格子点で与えられた2次元のスカラーデータを手早く等高線図で描きたいとい
うときには, メソッド(元サブルーチン) udcntr を呼びます(u2d1). udcntr ルーチンは等高線を描くだけですから, まず正規化変換を設定します.
ウインドウはgrswnd ルーチンで[tmin,tmax]×[zmin,zmax](
[0,5]×[20,50])と陽に設定
しますが, ビューポート([0.2,0.8,] ×[0.2,0.8,] )と変換メソッド(元関数)番号(1:
直角一様座標)は括弧内の初期値を用いるので, uspfit ルーチンを呼び,
さらに grstrf ルーチンでこれらを確定しています.
次に, ussttl ルーチンで座標軸タイトルの情報を与え, usdaxs
ルーチンでおまかせの座標軸を描きます.
そして, 最後に udcntr ルーチンを呼んで等高線を描きます. 現在設定 されているウインドウいっぱいに等間隔の格子点が設定されて,コンタリング が行なわれます. つまり, 座標軸の目盛に関係なく, U(1,1) が左下隅, U(NT,NZ) が右上隅にくるように等間隔の格子点座標が設定されます. コンターレベルは自動的に決定され, 図の下にそのコンター間隔が表示されま す. udcntr の引数の2番目以降で配列の寸法を指定しますが, 第1次元 寸法を2度指定するのは, 配列の一部分だけを作画できるようにするためです. この例のようにデータ全部を描く場合は, 2番目の引数と3番目の引数を同じ (nt)にします.
z (実数型) mx×nyの2次元配列. 作画には nx×nyの部分を使う. mx (整数型) 配列 zの第1次元整合寸法. nx (整数型) 作画に使う配列 zの第1次元寸法. ny (整数型) 作画に使う配列 zの第2次元寸法.
# u2d1.rb require "narray" require "numru/dcl" include NumRu include NMath nt = 51 nz = 21 tmin = 0.0 tmax = 5.0 zmin = 20.0 zmax = 50.0 dt = (tmax-tmin)/(nt-1) dz = (zmax-zmin)/(nz-1) u = NArray.sfloat(nt, nz) #-- data ---- zj = NArray.sfloat(nz).indgen! * dz uz = exp(-0.2*zj)*(zj**0.5) tz = -2.0*exp(-0.1*zj) for i in 0..nt-1 u[i,true] = uz*sin(3.0*(tz+i*dt)) end #-- graph ---- iws = (ARGV[0] || (puts ' WORKSTATION ID (I) ? ;'; DCL::sgpwsn; gets)).to_i DCL::gropn iws DCL::grfrm DCL::grswnd(tmin, tmax, zmin, zmax) DCL::uspfit DCL::grstrf DCL::ussttl('TIME', 'YEAR', 'HEIGHT', 'km') DCL::usdaxs DCL::udcntr(u) DCL::grclsprogram u2d1