1.3 とりあえず2次元ベクトル場

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

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

ベクトル場も Vector のメソッドを使うことによって高度な作図ができるよ うになります. これも第9章で説明することにしましょう.

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

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

#-- data ----
for j in 0..ny-1
  for i in 0..nx-1
    x = xmin + (xmax-xmin)*i/(nx-1)
    y = ymin + (ymax-ymin)*j/(ny-1)
    u[i,j] = x
    v[i,j] = -y
  end
end

#-- graph ----
Dev.open
Frame.new

Fig.window=[xmin,xmax,ymin,ymax]
Fig.viewport=[0.2, 0.8, 0.2, 0.8]
Fig.transnum=1

Axis.draw
Vector.draw(u, v)

Dev.close
PROGRAM QUICK5

\resizebox{10cm}{!}{\includegraphics{quick/quick5.eps}}
 
 
 
quick5.rb: frame1