描画領域の手動設定

グラフ用紙に何かのデータをプロットする時のことを思い浮かべてください. まず,直角一様座標か対数座標かのグラフ用紙を用意し,これからプロットし ようとするデータと,グラフ用紙の目盛りの数をにらんで「一目盛りいくらに しよう」と考えるはずです.このようにして実際のデータの数値とグラフ用紙 の目盛りとを対応づけるわけですが,このような操作をDCLでは「正規化変換」 と呼びます.

前章で使った次のサブルーチン・コールを,「おまかせ」でなく自分で陽に指 定することを考えましょう.

call DclScalingPoint( x, y )
call DclFitScalingParm
call DclSetTransFunction
は,第1章のプログラム HOP の場合,次と同じになります.
call DclSetWindow( -100., 100., 5.999, 6.001 )
call DclSetViewport( 0.2, 0.8, 0.2, 0.8 )
call DclSetTransFunction
ユーザーの使っている座標系でグラフに描きたい範囲を「ウインドウ」と呼び ますが,上の「おまかせ」では DclScalingPoint ルーチンで XY の最小値・最大値を求め,DclFitScalingParmで切りの良い値にしてウインドウ を設定しています.DclScalingPointはウインドウ情報を指定する代わりに,これ からプロットしたいデータそのものを与えて,これらがすべてウインドウ内に 納まるようにするものです.この例のデータでは (uxmin,uxmax,uymin,uymax) = (-100.,100.,5.999,6.001) ですから, この範囲でウインドウを指定するには,DclSetWindow ルーチンでこれらの値 を陽に与えます.第1章の軌跡図(f:hopページ)で,軌跡のまわりに 少し余白を与えようと思うと,これらの範囲を大きめにとれば良いことになり ます(次節のプログラム JUMP1 参照).

次に,このウインドウをV-座標系(実際に作画できる領域に最大内接する正方 形で[0,1] [0,1]で規格化された描画領域.第[here] 節参照)のどの範囲に対応させるかを考えて,これを「ビューポート」としま す.ビューポートとは,V-座標系で通常座標軸が描かれる矩形の領域のことで す.「おまかせ」では (vxmin,vxmax,vymin,vymax) = (0.2,0.8,0.2,0.8) の範囲をビューポートとしますが,ここではDclSetViewport ルーチンでこれらの値を陽に与えます.

このように設定されたパラメータの値は,変換関数を確定するルーチン DclSetTransFunction ルーチンを呼ぶことで有効になります.DclSetWindow などで値を設 定しただけでは何も変わらず,DclSetTransFunction が呼ばれてはじめて正規化変換 が具体的に決められるのです.

DclScalingPoint ルーチンを使ってウインドウを決めたり,初期値を使うことで ビューポートや変換関数番号の設定を省略する場合には,DclFitScalingParm ルー チンを呼んで正規化変換の設定をおまかせすることになります.一方, DclSetWindow, DclSetViewportの2つを自前で呼んでこれらを設定し た場合には,あと何も必要ありません.いずれの場合にも,DclSetTransFunctionルー チンを呼んで正規化変換を確定します.


DclSetWindow
(GRSWND)
ウインドウを設定する.
DclSetViewPort
(GRSVPT)
ビューポートを設定する.
DclSetTransNumber
(GRSTRN)
変換関数番号を設定する.
DclSetTransFunction
(GRSTRF)
変換関数を確定する.
DclFitScalingParm
(USPFIT)
すでに設定された情報から、適当なスケーリングで正規化変換パラメータを決める.

* 括弧の中は、対応するf77インターフェイス名.

関連リンク