描画領域の手動設定

 

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

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

call DclScalingPoint( x, y )
call DclFitScalingParm
call DclSetTransFunction
は,最初のプログラム sample01.f90 の場合,次と同じになります.
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ルーチンでこれらの値 を陽に与えます.sample01.f90の図で,軌跡のまわりに 少し余白を与えようと思うと,これらの範囲を大きめにとれば良いことになり ます.

次に,このウインドウを正規座標系(実際に作画できる領域に最大内接する正方 形で[0,1] [0,1]で規格化された描画領域)のどの範囲に対応させるかを考えて,これを「ビューポート」としま す.ビューポートとは,正規座標系で通常座標軸が描かれる矩形の領域のことで す.「おまかせ」では (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インターフェイス名.