これまでとにかく簡単に2次元平面内の軌跡図や分布図を描く方法を紹介して きましたが,この章ではもう少しグラフィクスの基本的な概念を理解して,応 用力をつけることにしましょう.
まず,第[here]節で宿題となっていた,「正規化変換」に関し て説明します.これらを理解すると,描画領域内の任意の場所に自分で図の縦 横比を決めて作画したり,対数座標のグラフを描いたりできるようになります.
グラフ用紙に何かのデータをプロットする時のことを思い浮かべてください. まず,直角一様座標か対数座標かのグラフ用紙を用意し,これからプロットし ようとするデータと,グラフ用紙の目盛りの数をにらんで「一目盛りいくらに しよう」と考えるはずです.このようにして実際のデータの数値とグラフ用紙 の目盛りとを対応づけるわけですが,このような操作を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章の軌跡図(f:hopページ)で,軌跡のまわりに 少し余白を与えようと思うと,これらの範囲を大きめにとれば良いことになり ます(次節のプログラム JUMP1 参照).
CALL GRSVPT( 0.2, 0.8, 0.2, 0.8 )
CALL GRSTRN( 1 )
CALL GRSTRF
次に,このウインドウをV-座標系(実際に作画できる領域に最大内接する正方 形で[0,1] [0,1]で規格化された描画領域.第[here] 節参照)のどの範囲に対応させるかを考えて,これを「ビューポート」としま す.ビューポートとは,V-座標系で通常座標軸が描かれる矩形の領域のことで す.「おまかせ」では (VXMIN,VXMAX,VYMIN,VYMAX) = (0.2,0.8,0.2,0.8) の範囲をビューポートとしますが,ここではGRSVPT ルーチンでこれらの値を陽に与えます.
これで,ウインドウとビューポートの四隅は対応させることが出来ましたが, ウインドウ内の各点をビューポート内の点に対応させる必要があります.線形 に対応させるか,対数をとって対応させるかなどの任意性がありますから,具 体的に変換関数を決めなければなりません.「おまかせ」では直角一様座標で すから,GRSTRN ルーチンで変換関数番号を1と指定します.
このように設定されたパラメータの値は,変換関数を確定するルーチン GRSTRF ルーチンを呼ぶことで有効になります.GRSWND などで値を設 定しただけでは何も変わらず,GRSTRF が呼ばれてはじめて正規化変換 が具体的に決められるのです.
UXMIN, (実数型) ウインドウの x 座標の UXMAX 最小値と最大値. UYMIN, (実数型) ウインドウの y 座標の UYMAX 最小値と最大値.
VXMIN, (実数型) ビューポートの x 座標の VXMAX 最小値と最大値.(初期値は0.2と0.8) VYMIN, (実数型) ビューポートの y 座標の VYMAX 最小値と最大値.(初期値は0.2と0.8)
ITR (整数型) 変換関数番号. 1:直角一様座標,2:片対数 (y軸)座標,3:片対数 (x軸)座標, 4:両対数座標.(初期値は1)
ウインドウ,ビューポート,および変換関数を設定したあとで,このルー チンを呼び,正規化変換を確定する.
USSPNT ルーチンを使ってウインドウを決めたり,初期値を使うことで ビューポートや変換関数番号の設定を省略する場合には,USPFIT ルー チンを呼んで正規化変換の設定をおまかせすることになります.一方, GRSWND, GRSVPT, GRSTRN の3つを自前で呼んでこれらを設定し た場合には,あと何も必要ありません.いずれの場合にも,GRSTRFルー チンを呼んで正規化変換を確定します.
USSPNT で設定されたデータをもとにウインドウを決め,それ以外の パラメータも陽に指定しなければそれぞれの初期値を使って,正規化変換 を設定する.
大きい図形の隣に小さな図形を並べる時には,GRSVPT を使って陽にビュー ポートを設定することになります.次のプログラム JUMP1 を御覧下さ い.まず,ビューポートを (0.15,0.45,0.65,0.95) として,描画範囲 の左上に正方形の図を描きます.内容は,第[here]節のプロ グラム HOP と同様のリサジュー図です.次に,43行めで GRFIG ルーチンを呼んで2番めの図を描くために必要な初期化をします.GRFRM と違って,次のフレームには移りません.そして,ビューポートを (0.15,0.95,0.1,0.5) として下の図を描きます.こうすれば,縦横比が1:2の 長方形の図となります.内容は,第[here]節の分布図と同様の ものです.
一つのフレーム内に複数の図を描くとき,2つ目以降の図を描き始める 前に,そのつど,このルーチンを呼ぶ.
jump1.f: frame1
次のプログラム JUMP2 は両対数座標のグラフを描く例です.GRSTRN ルーチンで正規化変換の変換関数番号を4に指定します.
対数座標軸の描画も USDAXS ルーチンにおまかせ下さい. ここで, USSTTL ルーチンで指定する文字列ですが,'|', '"' など の制御文字を使うと上付や下付の添字も描けます.
'|' 上付添字の始まり '' 下付添字の始まり ' quot;' 上付または下付添字の終わり注意: 文字列が添字で終る場合でも,最後に必ず '"'を入れて通常 の文字モードに戻すこと.
jump2.f: frame1
NUMAGUTI Atusi <a1n@gfdl.gov> Last Modified: Thu Aug 31 13:12:23 EDT 1995