6.3 ベクトル場

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

この例でも, 等間隔の格子点を設定して, それぞれの格子点でのベクトルを矢 印で表現します. おまかせ描画のときには, ベクトルの長さが格子点間隔を越 えないようにスケーリングファクターが決定され, それを乗じてベクトルが描 かれます. この場合, x mail protected],$Hy mail protected],$N%9%1!<%j%s%0%U%!%/%?!<$OF1$8$K なっていて, 図の下部マージンにはその値が表示されています.

#
# 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.close

PROGRAM U2D3



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