グラフ用紙に何かのデータをプロットする時のことを思い浮かべてください.
まず, 直角一様座標か対数座標かのグラフ用紙を用意し, これからプロットし
ようとするデータと, グラフ用紙の目盛りの数をにらんで「一目盛りいくらに
しよう」と考えるはずです. このようにして実際のデータの数値とグラフ用紙
の目盛りとを対応づけるわけですが, このような操作をDCLでは「正規化変換」
と呼びます.
前章で使った次のサブルーチン・コールを, 「おまかせ」でなく自分で陽に指 定することを考えましょう.
CALL USSPNT( NMAX, X, Y )は, 第1章のプログラム HOP の場合, 次と同じになります.
CALL USPFIT
CALL GRSTRF
CALL GRSWND( -100., 100., 5.999, 6.001 )ユーザーの使っている座標系でグラフに描きたい範囲を「ウインドウ」と呼び ますが, 上の「おまかせ」では USSPNT ルーチンで X と Y の最小値・最大値を求め, USPFITで切りの良い値にしてウインドウ を設定しています. USSPNTはウインドウ情報を指定する代わりに, これ からプロットしたいデータそのものを与えて, これらがすべてウインドウ内に 納まるようにするものです. この例のデータでは (UXMIN,UXMAX,UYMIN,UYMAX) = (-100.,100.,5.999,6.001) ですから, この範囲でウインドウを指定するには, GRSWND ルーチンでこれらの値 を陽に与えます. 第1章の軌跡図(2.1ページ)で, 軌跡のまわりに 少し余白を与えようと思うと, これらの範囲を大きめにとれば良いことになり ます(次節のプログラム JUMP1 参照).
CALL GRSVPT( 0.2, 0.8, 0.2, 0.8 )
CALL GRSTRN( 1 )
CALL GRSTRF
次に, このウインドウをV-座標系(実際に作画できる領域に最大内接する正方
形で
[0,1]×[0,1] で規格化された描画領域. 第3.3
節参照)のどの範囲に対応させるかを考えて, これを「ビューポート」としま
す. ビューポートとは, V-座標系で通常座標軸が描かれる矩形の領域のことで
す. 「おまかせ」では (VXMIN,VXMAX,VYMIN,VYMAX) = (0.2,0.8,0.2,0.8) の範囲をビューポートとしますが, ここではGRSVPT ルーチンでこれらの値を陽に与えます.
これで, ウインドウとビューポートの四隅は対応させることが出来ましたが,
ウインドウ内の各点をビューポート内の点に対応させる必要があります. 線形
に対応させるか, 対数をとって対応させるかなどの任意性がありますから, 具
体的に変換関数を決めなければなりません. 「おまかせ」では直角一様座標で
すから, GRSTRN ルーチンで変換関数番号を1と指定します.
このように設定されたパラメータの値は, 変換関数を確定するルーチン GRSTRF ルーチンを呼ぶことで有効になります. GRSWND などで値を設 定しただけでは何も変わらず, GRSTRF が呼ばれてはじめて正規化変換 が具体的に決められるのです.
UXMIN, UXMAX (実数型) ウインドウの x 座標の 最小値と最大値. UYMIN, UYMAX (実数型) ウインドウの y 座標の 最小値と最大値.
VXMIN, VXMAX (実数型) ビューポートの x 座標の 最小値と最大値.(初期値は0.2と0.8) VYMIN, VYMAX (実数型) ビューポートの y 座標の 最小値と最大値.(初期値は0.2と0.8)
ITR (整数型) 変換関数番号. 1:直角一様座標, 2:片対数(y軸)座標, 3:片対数(x軸)座標, 4:両対数座標. (初期値は1)
ウインドウ, ビューポート, および変換関数を設定したあとで, このルー チンを呼び, 正規化変換を確定する.
USSPNT ルーチンを使ってウインドウを決めたり, 初期値を使うことで ビューポートや変換関数番号の設定を省略する場合には, USPFIT ルー チンを呼んで正規化変換の設定をおまかせすることになります. 一方, GRSWND, GRSVPT, GRSTRN の3つを自前で呼んでこれらを設定し た場合には, あと何も必要ありません. いずれの場合にも, GRSTRFルー チンを呼んで正規化変換を確定します.
USSPNT で設定されたデータをもとにウインドウを決め, それ以外の パラメータも陽に指定しなければそれぞれの初期値を使って, 正規化変換 を設定する.