まず, 第2.1節で宿題となっていた, 「正規化変換」に関して説明します. これらを理解すると, 描画領域内 の任意の場所に自分で図の縦横比を決めて作画したり, 対数座標のグラフを描いたりできるようになります.
3.1 基本概念(4): 正規化変換
グラフ用紙に何かのデータをプロットする時のことを思い浮かべてください. まず, 直角一様座標か対数座 標かのグラフ用紙を用意し, これからプロットしようとするデータと, グラフ用紙の目盛りの数をにらんで 「一目盛りいくらにしよう」と考えるはずです. このようにして実際のデータの数値とグラフ用紙の目盛り とを対応づけるわけですが, このような操作をDCL では「正規化変換」と呼びます.
前章で使った次のサブルーチン・コールを, 「おまかせ」でなく自分で陽に指定することを考えましょう.
CALL USSPNT( NMAX, X, Y ) CALL USPFIT CALL GRSTRF
は, 第1 章のプログラムHOP の場合, 次と同じになります.
CALL GRSWND( -100., 100., 5.999, 6.001 ) CALL GRSVPT( 0.2, 0.8, 0.2, 0.8 ) CALL GRSTRN( 1 ) CALL GRSTRF
ユーザーの使っている座標系でグラフに描きたい範囲を「ウインドウ」と呼びますが, 上の「おまかせ」では USSPNT ルーチン でX とY の最小値・最大値を求め, USPFIT で切りの良い値にしてウインドウを設定してい ます. USSPNT はウインドウ情報を指定する代わりに, これからプロットしたいデータそのものを与えて, これ らがすべてウインドウ内に納まるようにするものです. この例のデータでは(UXMIN,UXMAX,UYMIN,UYMAX) = (-100.,100.,5.999,6.001) ですから, この範囲でウインドウを指定するには, GRSWND ルーチンでこれ らの値を陽に与えます. 第1 章の軌跡図(3ページ) で, 軌跡のまわりに少し余白を与えようと思うと, これ らの範囲を大きめにとれば良いことになります(次節のプログラムJUMP1 参照).
次に, このウインドウをV-座標系(実際に作画できる領域に最大内接する正方形で[0; 1] [0; 1] で規格 化された描画領域. 第2.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 ルーチンを呼んで正規化変換を確定します.
3.2 異なる大きさの図形
大きい図形の隣に小さな図形を並べる時には, GRSVPT を使って陽にビューポートを設定することになりま す. このプログラムJUMP1 を御覧下さい. まず, ビューポートを(0.15,0.45,0.65,0.95) として, 描画 範囲の左上に正方形の図を描きます. 内容は, 第1.1節のプログラムHOP と同様のリサジュー図です. 次に, 43 行めで GRFIG ルーチンを呼んで2 番めの図を描くために必要な初期化をします. GRFRM と違って, 次の フレームには移りません. そして, ビューポートを(0.15,0.95,0.1,0.5) として下の図を描きます. こう すれば, 縦横比が1:2 の長方形の図となります. 内容は, 第2.3節の分布図と同様のものです.
3.3 対数座標
このプログラムJUMP2 は両対数座標のグラフを描く例です. GRSTRN ルーチンで正規化変換の変換関数番 号を4 に指定します.
対数座標軸の描画もUSDAXS ルーチンにおまかせ下さい. ここで, USSTTL ルーチンで指定する文字列です が, '_', '"' などの制御文字を使うと上付や下付の添字も描けます.
・添字モードの制御文字 '_' 上付添字の始まり '_' 下付添字の始まり '"' 上付または下付添字の終わり 注意: 文字列が添字で終る場合でも, 最後に必ず'"' を入れて通常の文字モードに戻すこと.