3.2 ポリラインプリミティブ

折れ線を描くポリラインプリミティブには, 次の2つの属性があります.

カラーグラフィクスについてはまとめて第12章で説明しますので, ここでは線の太さだけが変えられる出力装置を念頭に置いて説明しましょう.

プログラム 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

\resizebox{10cm}{!}{\includegraphics{kihon1/kihon2_001.eps}}
kihon2.rb: frame1

\resizebox{10cm}{!}{\includegraphics{kihon1/kihon2_002.eps}}
kihon2.rb: frame2