8.3 配列の一部分だけを描く

配列の一部分だけを作画するにはどうしたらよいのでしょう? これまでと同じ データで, その一部分だけを描くことを考えてみましょう(U2D4).

経度80$^{\circ}$から320$^{\circ}$, 緯度 -60$^{\circ}$から60$^{\circ}$の 部分だけを描くことにします. 6行めのパラメータ文で与えているように, 格 子点の範囲はx方向に9 ≦ i ≦ 33, y方向に7 ≦ j ≦ 31  となります. ウインドウの設定を この範囲とし, Contour.draw メソッドで等高線図を描くのですが, ここで一工夫が必要です. 最初の引数としては, この矩形領域の左下に対応する配列要素 P(kxmn,kymn) を陽に与えることによって配列の一部分だけを作画することができます.

#
# u2d4.rb

require "narray"
require "numru/advanceddcl"
include NumRu::AdvancedDCL
include NMath


nx = 37
ny = 37
xmin = 0
xmax = 360
ymin = -90
ymax = 90
drad = PI / 180
kxmn = 9
kxmx = 33
kymn = 7
kymx = 31

p = NArray.sfloat(nx, ny)
alon = NArray.sfloat(nx)
alat = NArray.sfloat(ny)

#-- data ---
for i in 0..nx-1
  alon[i] = xmin + (xmax-xmin)*i/(nx-1).to_f
end
for j in 0..ny-1
  alat[j] = ymin + (ymax-ymin)*j/(ny-1).to_f
end

for j in 0..ny-1
  slat = sin(alat[j]*drad)
  for i in 0..nx-1
    p[i,j] = 3*sqrt(1-slat**2)*slat*cos(alon[i]*drad) - 0.5*(3*slat**2-1)
  end
end

#-- graph ---
Dev.open

Frame.new

Fig.window = [alon[kxmn-1], alon[kxmx-1], alat[kymn-1], alat[kymx-1]]
Fig.viewport = [0.2, 0.8, 0.2, 0.8]
Fig.transnum = 1

Axis.draw
Contour.draw(p[(kxmn-1)..(kxmx-1), (kymn-1)..(kymx-1)])

Dev.close

PROGRAM U2D4

\resizebox{10cm}{!}{\includegraphics{u2d1/u2d4.eps}}
u2d4.rb: frame1