折れ線を描くポリラインプリミティブには, 次の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