今度は, 2次元のベクトル場を手早く矢印で描きたいというときの例題です.
次のプログラム U2D3 は簡単な変形場を描くものですが, メソッド
Vector.draw 1つを呼ぶだけで十分です. 前節の等高線図の場合と同様に, お
まかせの座標軸を描画したあとで Vector.draw メソッドを呼んでベクトル場
を描いています.
この例でも, 等間隔の格子点を設定して, それぞれの格子点でのベクトルを矢 印で表現します. おまかせ描画のときには, ベクトルの長さが格子点間隔を越 えないようにスケーリングファクターが決定され, それを乗じてベクトルが描 かれます. この場合, x [email protected],$Hy [email protected],$N%9%1!<%j%s%0%U%!%/%?!<$OF1$8$K なっていて, 図の下部マージンにはその値が表示されています.
U (実数型) ベクトルのx [email protected],$rM?$($k2次元配列. V (実数型) ベクトルのy [email protected],$rM?$($k2次元配列.
# # u2d3.rb require "narray" require "numru/advanceddcl" include NumRu::AdvancedDCL include NMath 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 ---- for j in 0..ny-1 for i in 0..nx-1 xi = xmin + i*dx yj = ymin + j*dy u[i,j] = xi v[i,j] = -yj end end #-- graph ---- Dev.open Frame.new Fig.window = [xmin, xmax, ymin, ymax] Axis.title('X', 'km', 'Y', 'km') Axis.draw Vector.draw(u, v) Dev.closePROGRAM U2D3