GKSによる2次元グラフィックス
GKSを使ったプログラム例の補足

目盛りつきのワクをかくサブルーチン

目盛りつきのワクをかく部分は、サブルーチンwaku2 (ファイルwaku2.f [link])としてある。 (決定版ができたら単にWAKUという名前にしようと思いながら、引き数が やたらに多い暫定版のまま、何年もたってしまった)。この中では多少ややこしい 作業をしている。ひとつは、GKSのルーチンGTXは文字列を表示するものであるから、 目盛りの数値を数字からなる文字列に変換することが必要である。もうひとつ、 目盛りにつける文字の位置はWCできりのいいところにし、文字の大きさをNDCの 尺度で指定したいのだが、GKSでは文字の大きさもWCの尺度で指定しなければ ならない。そこで、あまりすっきりしないが、0番の正規化変換(WC=NDC)を選択 しておいて、1番の正規化変換のWCからNDCへの換算を自まえでやる(wc2ndc.{f,c}に あるルーチンを使う)ことで切り抜けている。

引き数の数が多くなっている理由は、目盛りや数字をつける位置を、呼ぶ 側のプログラムから指定していることである。 Fortranでルーチン間で情報を引き渡すには、引き数とcommonがある。 NCAR Graphicsではcommon文をさかんに使っているが、ここでは簡単な例文と いうことでそれを避けることにした。 また、entry文を使って複数の入り口をもつサブルーチンを作り、入り口ごと の引き数の数を減らす方法もあるが、わたしが使い慣れていないので今回は避 けた。 目盛りや数字をつける位置を適切に自動計算する方法(たとえば、Heckbert, 1990)を組みこんだ上で、プログラムの形も整えたいと考えている。

現状でのwaku2の引き数について簡単に説明しておく。ただし、ここでWCと書いたのは、正規化変換1番のWCをさしている(正規化変換0番のWCはNDCと同じである)。

wxmin, wxmax, wymin, wymax (実数):ワクの左、右、下、上の辺の位置(WC)
wxtk0                      (実数):x軸上で目盛りを打つ最初の位置(WC)
       wxtki               (実数):x軸上の目盛りの間隔(WC)
              wytk0, wytki (実数):y軸上での目盛りを打つ最初の位置と間隔(WC)
dvxbtk,dvybtk              (実数):それぞれの軸につける数字を伴う目盛りの長さ(NDC)
              dvxltk,dvyltk(実数):それぞれの軸につける数字のない目盛りの長さ(NDC)
wxlb0, wxlbi, wylb0, wylbi (実数):それぞれの軸で数字をかく最初の位置と間隔(WC)
chsiz                      (実数):数字の大きさ(NDC)
labix                      (整数):x軸につける数字の整数部分の桁数
       labfrx              (整数):x軸につける数字の小数部分の桁数
              labiy, labfry(整数):y軸につける数字の整数部分と小数部分の桁数
なお、labix=0でlabfrx=0の場合はx軸の目盛りには数字をつけない。 y軸についても同様。

参考文献


2000-04-24, 2005-08-10, 2005-08-11, 2020-08-16
増田 耕一
[目次へ]