マーカー列を描くポリマーカープリミティブには, 次の3つの属性があります.
まず最初のフレームですが, 第3.1節で見たように, 単に sgpmv ルーチンを呼ぶと初期値である・のマーカー列が描かれます. 28行め
の sgspmt ルーチンでマーカータイプを2から7まで変えると, +,
*, 。 と順に異なるマーカー列が上から下へと描かれていきます.
巻末付録のフォントテーブルにあるマーク・記号・文字などには, それぞれ
DCL文字番号が与えられていますが, ここでは sgspmt で与えるDCL文字
番号に対応するマーカー列が描かれているのです. たとえばitype=152
のとき, α のマーカー列を描きます.
次のフレームではマーカーの大きさを変えています. 初期値はV-座標系におけ
る単位で 0.01 です. 2番めからは, sgspms ルーチンで大きさを
0.005, 0.01, 0.015, …,
0.03 と変えた結果です. 塗りつぶしたような
マーカーもどんどん大きくしていくと, いくつかの線分で構成されていること
が見えてきます. このような時には, sgspmi ルーチンで描くマーカー
のラインインデクスを大きくしておくと, 線が太くなって塗りつぶした雰囲気
が出てきます.
# kihon3.rb require "narray" require "numru/dcl" include NumRu include Math nmax = 40 imax = 7 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.1*i end end #-- graph ---- iws = (ARGV[0] || (puts ' WORKSTATION ID (I) ? ;'; DCL::sgpwsn; gets)).to_i DCL::sgopn iws #-- marker type : frame 1 -- DCL::sgfrm DCL::slpvpr(1) DCL::sgpmv(x, y[true,0]) for i in 1..imax-1 itype = i + 1 DCL::sgspmt(itype) DCL::sgpmv(x, y[true,i]) end #-- marker size : frame 2 -- DCL::sgfrm DCL::slpvpr(1) DCL::sgspmt(10) DCL::sgpmv(x, y[true,0]) for i in 1..imax-1 rsize = 0.005*i DCL::sgspms(rsize) DCL::sgpmv(x, y[true,i]) end DCL::sgcls