4.1 基本概念(4): 正規化変換

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

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

NumRu::DCL.usspnt(x,y)
CALL uspfit
CALL grstrf
は, 第1章のプログラム hop の場合, 次と同じになります.
NumRu::DCL.grswnd(uxmin,uxmax,uymin,uymax)
NumRu::DCL.grsvpt(vxmin,vxmax,vymin,vymax)
NumRu::DCL.grstrn(itr)
CALL grstrf
ユーザーの使っている座標系でグラフに描きたい範囲を「ウインドウ」と呼び ますが, 上の「おまかせ」では usspnt ルーチンで xy の最小値・最大値を求め, uspfitで切りの良い値にしてウインドウ を設定しています. usspntはウインドウ情報を指定する代わりに, これ からプロットしたいデータそのものを与えて, これらがすべてウインドウ内に 納まるようにするものです. この例のデータでは (UXMIN,UXMAX,UYMIN,UYMAX) = (-100.,100.,5.999,6.001) ですから, この範囲でウインドウを指定するには, grswnd ルーチンでこれらの値 を陽に与えます. 第1章の軌跡図(2.1ページ)で, 軌跡のまわりに 少し余白を与えようと思うと, これらの範囲を大きめにとれば良いことになり ます(次節のプログラム jump1 参照).

次に, このウインドウを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 が呼ばれてはじめて正規化変換 が具体的に決められるのです.

usspnt ルーチンを使ってウインドウを決めたり, 初期値を使うことで ビューポートや変換メソッド(元関数)番号の設定を省略する場合には, uspfit ルー チンを呼んで正規化変換の設定をおまかせすることになります. 一方, grswnd, grsvpt, grstrn の3つを自前で呼んでこれらを設定し た場合には, あと何も必要ありません. いずれの場合にも, grstrfルー チンを呼んで正規化変換を確定します.