折れ線を描くポリラインプリミティブには, 次の2つの属性があります.
プログラム kihon2 では, これらの属性がどのように指定できるかを示
します. 正弦曲線を sgplv ルーチンで描いていますが, 一番上の線が
ラインインデクスが初期値(1)の場合です(24行め). 次からの3本は, 27行めの
sgspli ルーチンでこの値を4, 6, 8と変えて描いた結果です. ラインイ
ンデクスが大きくなるにつれて, 線が太くなります.
34行めで sgfrm ルーチンを呼んで次のフレームを設定し, 今度はライ
ンタイプを変えて描いています. ラインタイプとは, 実線, 破線などの線種で
すが, 1から4までの番号にはあらかじめ次のタイプが決められています. 1:
実線, 2: 破線, 3: 点線, 4: 1点鎖線. 初期値は1で, 単に sgplv ルー
チンを呼ぶと実線で折れ線を描きます. そういえば, frame1 の結果も実線でし
た. 40行めの sgsplt ルーチンでこの値を2, 3, 4と変えて描いた結果
が frame2 です.
ラインタイプには, まだまだいろんな種類があり, ユーザーがそれぞれの好み の線種を指定することが可能です. それは第4.2節で詳しく説 明することにしましょう.
# kihon2.rb
require "narray"
require "numru/dcl"
include NumRu
include Math
nmax = 40
imax = 4
dt = 4.0*PI/nmax
x = NArray.sfloat(nmax+1)
y = NArray.sfloat(nmax+1, imax)
#-- data ----
x = x.indgen * 1.0/nmax
for n in 0..nmax
for i in 0..imax-1
y[n,i] = 0.2*sin(n*dt) + 0.8 - 0.2*i
end
end
#-- graph ----
iws = (ARGV[0] || (puts ' WORKSTATION ID (I) ? ;'; DCL::sgpwsn; gets)).to_i
DCL::sgopn iws
#-- line index : frame 1 --
DCL::sgfrm
DCL::slpvpr(1)
DCL::sgplv(x, y[true,0])
for i in 1..imax-1
DCL::sgspli(2*(i+1))
DCL::sgplv(x, y[true,i])
end
DCL::sgspli(1)
#-- line type : frame 2 --
DCL::sgfrm
DCL::slpvpr(1)
DCL::sgplv(x, y[true,0])
for i in 1..imax-1
DCL::sgsplt(i+1)
DCL::sgplv(x, y[true,i])
end
DCL::sgcls
PROGRAM KIHON2