グラフ用紙に何かのデータをプロットする時のことを思い浮かべてください.
まず, 直角一様座標か対数座標かのグラフ用紙を用意し, これからプロットし
ようとするデータと, グラフ用紙の目盛りの数をにらんで「一目盛りいくらに
しよう」と考えるはずです. このようにして実際のデータの数値とグラフ用紙
の目盛りとを対応づけるわけですが, このような操作をDCLでは「正規化変換」
と呼びます.
前章で使った次のメソッド(元サブルーチン)・コールを, 「おまかせ」でなく自分で陽に指 定することを考えましょう.
NumRu::DCL.usspnt(x,y)は, 第1章のプログラム hop の場合, 次と同じになります.
CALL uspfit
CALL grstrf
NumRu::DCL.grswnd(uxmin,uxmax,uymin,uymax)ユーザーの使っている座標系でグラフに描きたい範囲を「ウインドウ」と呼び ますが, 上の「おまかせ」では usspnt ルーチンで x と y の最小値・最大値を求め, uspfitで切りの良い値にしてウインドウ を設定しています. usspntはウインドウ情報を指定する代わりに, これ からプロットしたいデータそのものを与えて, これらがすべてウインドウ内に 納まるようにするものです. この例のデータでは (UXMIN,UXMAX,UYMIN,UYMAX) = (-100.,100.,5.999,6.001) ですから, この範囲でウインドウを指定するには, grswnd ルーチンでこれらの値 を陽に与えます. 第1章の軌跡図(2.1ページ)で, 軌跡のまわりに 少し余白を与えようと思うと, これらの範囲を大きめにとれば良いことになり ます(次節のプログラム jump1 参照).
NumRu::DCL.grsvpt(vxmin,vxmax,vymin,vymax)
NumRu::DCL.grstrn(itr)
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 で設定されたデータをもとにウインドウを決め, それ以外の パラメータも陽に指定しなければそれぞれの初期値を使って, 正規化変換 を設定する.