そしてジャンプ

これまでとにかく簡単に2次元平面内の軌跡図や分布図を描く方法を紹介して きましたが,この章ではもう少しグラフィクスの基本的な概念を理解して,応 用力をつけることにしましょう.

まず,第[here]節で宿題となっていた,「正規化変換」に関し て説明します.これらを理解すると,描画領域内の任意の場所に自分で図の縦 横比を決めて作画したり,対数座標のグラフを描いたりできるようになります.

基本概念(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 ルーチンで XY の最小値・最大値を求め,USPFITで切りの良い値にしてウインドウ を設定しています.USSPNTはウインドウ情報を指定する代わりに,これ からプロットしたいデータそのものを与えて,これらがすべてウインドウ内に 納まるようにするものです.この例のデータでは (UXMIN,UXMAX,UYMIN,UYMAX) = (-100.,100.,5.999,6.001) ですから, この範囲でウインドウを指定するには,GRSWND ルーチンでこれらの値 を陽に与えます.第1章の軌跡図(f:hopページ)で,軌跡のまわりに 少し余白を与えようと思うと,これらの範囲を大きめにとれば良いことになり ます(次節のプログラム JUMP1 参照).

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

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

異なる大きさの図形

大きい図形の隣に小さな図形を並べる時には,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]節の分布図と同様の ものです.


jump1.f: frame1

jump/jump1.f

対数座標

次のプログラム JUMP2 は両対数座標のグラフを描く例です.GRSTRN ルーチンで正規化変換の変換関数番号を4に指定します.

対数座標軸の描画も USDAXS ルーチンにおまかせ下さい. ここで, USSTTL ルーチンで指定する文字列ですが,'|', '"' など の制御文字を使うと上付や下付の添字も描けます.

jump/jump2.f


jump2.f: frame1


Back to Main


Latex Source


地球流体電脳倶楽部 : 95/6/9 (Version 5.0)

NUMAGUTI Atusi <a1n@gfdl.gov>
Last Modified: Thu Aug 31 13:12:23 EDT 1995