6.3 ベクトル場

今度は, 2次元のベクトル場を手早く矢印で描きたいというときの例題です. 次のプログラム u2d3 は簡単な変形場を描くものですが, メソッド(元サブルーチン) ugvect 1つを呼ぶだけで十分です. 前節の等高線図の場合と同様に, お まかせの座標軸を描画したあとで ugvect ルーチンを呼んでベクトル場 を描いています.

この例でも, 等間隔の格子点を設定して, それぞれの格子点でのベクトルを矢 印で表現します. おまかせ描画のときには, ベクトルの長さが格子点間隔を越 えないようにスケーリングファクターが決定され, それを乗じてベクトルが描 かれます. この場合, x 成分とy 成分のスケーリングファクターは同じに なっていて, 図の下部マージンにはその値が表示されています.

# u2d3.rb

require "narray"
require "numru/dcl"

include NumRu
include Math

nx = 21
ny = 21
xmin = -1.0
xmax = 1.0
ymin = -1.0
ymax = 1.0
dx = (xmax-xmin)/(nx-1)
dy = (ymax-ymin)/(ny-1)

u = NArray.sfloat(nx, ny)
v = NArray.sfloat(nx, ny)

#-- data ----
xi = xmin + NArray.sfloat(nx).indgen! * dx
yj = ymin + NArray.sfloat(ny).indgen! * dy
for j in 0..ny-1; u[true,j] = xi; end
for i in 0..nx-1; v[i,true] = -yj; end

#-- graph ----
iws = (ARGV[0] || (puts ' WORKSTATION ID (I)  ? ;'; DCL::sgpwsn; gets)).to_i
DCL::gropn iws
DCL::grfrm

DCL::grswnd(xmin, xmax, ymin, ymax)
DCL::uspfit
DCL::grstrf

DCL::ussttl('X', 'km', 'Y', 'km')
DCL::usdaxs

DCL::ugvect(u, v)

DCL::grcls

program u2d3



\resizebox{10cm}{!}{\includegraphics{u2d/u2d3.eps}}
u2d3.rb: frame1