図形を描くためには, まずディスプレイやプリンタなど デバイス の準備をする必要がある. その準備をする操作を「オープン」という. そして,最後に描画を終了する時の操作を「クローズ」という. すべての図形は,デバイスをオープンしてからクローズするまでの間に 描かれなければならない. 地球流体電脳ライブラリでは,一度に1つのデバイスをオープンすることがで きる. 同時に2つ以上のデバイスをオープンすることはできないが, オープン時にいくつかのデバイスの中の1つを選択できる.
デバイスに出力される図形が複数ページにわたることがあるが, 地球流体電脳ライブラリでは, ページという言葉の代わりにフレームという言葉を使う. これは, デバイスによってはページという概念のないもの (例えば,巻物のような長い紙に出力するようなデバイス)があったり, 後述のように物理的な1ページの中に複数のフレームを設定することもあるので, 物理的なページと区別するためである.
グラフィックを使うプログラムの形態は次のようになる.
CALL SGOPN(1) ! デバイス番号 1 の装置をオープン CALL SGFRM ! フレームを用意 ........ ........ ! 1 ページめの描画プログラム ........ CALL SGFRM ! 改ページ ........ ........ ! 2 ページめの描画プログラム ........ CALL SGFRM . . . . . . CALL SGCLS ! デバイスのクローズ
本ライブラリで使用する座標系には 4 つのレベルがある. それぞれのレベルには上位レベルから順に U, V, R, W という記号が付けられ, 「U座標系」,「V座標系」,「R座標系」,「W座標系」と いうように呼ばれる(図 参照). この U, V, R, W という文字は,それぞれ次のような名前に由来するが, これらの名前が長いので, 以後は単に 「U座標系」などの用語を使うことにする (さらに UC などとも略記する).
U ユーザ座標系 User coordinate V 仮想直角座標系 Virtual rectangular coordinate R 正規直角座標系 normalized Rectangular coordinate W 装置座標系 Workstation coordinate
レファレンスマニュアルの引数の説明でも, U座標系の座標値は (UX,UY) というように, 座標系を表す文字をつけて記述してある. (正規直角座標系を N 座標系でなく R 座標系と呼ぶのは, 実変数に関する FORTRAN の規則による.)
1mm
(120,60) (20, 4)(0,0)装置座標} (20, 16)(0,0)正規直角座標} (20, 28)(0,0)仮想直角座標} (20, 40)(0,0)ユーザー座標}図1(50, 4)(0,0)WC (50, 14)(0,-1)8} (50, 16)(0,0)RC (50, 26)(0,-1)8} (50, 28)(0,0)VC (50, 32)(0,-1)2} (50, 34)(0,0)(TC) (50, 38)(0,-1)2} (50, 40)(0,0)UC (50, 50)(0,0)2次元座標}
(55, 28)(1,0)10}
(68, 26)(-2,-1)16} (70, 28)(0,0)VC3 (70, 38)(0,-1)8} (70, 40)(0,0)UC3 (70, 50)(0,0)3次元座標}
(95, 10)(0,0)ワークステーション変換} (95, 22)(0,0)透視変換} (95, 34)(0,0)正規化変換}
最も上位の U座標系は普通のX-Y座標から地図投影座標まで多くの座標系を含む. その一つ下位のV座標系には2次元,3次元のそれぞれ1つずつの直角座標系が 定義されており, 多様なU系の座標はすべてこの2種類の座標系に変換される. この変換のことを「正規化変換」 と呼ぶ.
一方, 最も下位の座標系である W 座標系はデバイス固有の座標系で, デバイスによって異なる. これを統一するために,その一つ上位に R 座標系を定義して, すべてこの R 座標系を経由して W座標系に変換される. この変換を「ワークステーション変換」と呼ぶ. R座標系は2次元の直角座標系で, x軸,y軸 ともに定義域は[0,1] である.
これらの上位2つと下位2つの座標系を結ぶ V座標系から R 座標系への変換は 「透視変換」 と呼ばれる. 透視変換はその名の通り,透視図法すなわち遠近法による変換で, 基本的に3次元のV座標系から 2次元のR座標系への変換である. 2次元のV座標系は,一旦,3次元のV座標系に割り付けられてから透視変換 される. この時2次元のV座標系を割り付ける位置は, 3次元座標の x軸,y軸 または z軸に垂直な任意の平面にとることができる. これにより,2次元的に描いた1枚の図を斜めから眺めたような描写が可能にな る.
初期状態では,2次元V座標系からの透視変換は恒等変換となっているため, 2次元の座標系を普通に使う限り,透視変換を意識する必要はないが, あとで透視変換を使いたくなることも考えて, V座標系とR座標系は使い分けておいた方が良い. すなわち,座標軸などの「図に付随した情報」は, 透視図法で図とともに変換すべき情報なので V 座標系で描画し, SLPACK の描くページ数やパラメタの数値などのように「紙に付随した情報」 は R 座標系で描画すべきである.
なお,地図座標系の正規化変換は, 座標の「回転」と「投影」の2段階で行なわれ, その中間の座標 (U座標系を回転した座標)を T 座標 (Terrestrial coordinate) という. T 座標はx軸の定義域が[-180, 180], y軸の定義域が[-90, 90]の座標系で, この座標系から各地図投影の定義式に従って変換される. 任意の経線を中央経線としたり,横軸法や斜軸法の投影をするためには 投影の前に回転操作が必要となる.
T座標系は正規化変換の際の一時的な作業座標系であるので, これを意識しなければならないことは少いが, 地図座標のクリッピングだけは U座標系ではなくT座標系で行なわれるので, この座標系を意識する必要がある.
2次元のU座標系には次のような種類があり, ユーザーはその中から関数番号で指定する (略号,または名称から関数番号を返す関数も用意されている). 各座標系は,その種類によって正規化変換に必要なパラメータが異なる.
番号 略号 名 称 1 U-U UNI-UNI 直角一様座標 2 U-L UNI-LOG 片対数座標 3 L-U LOG-UNI 片対数座標 4 L-L LOG-LOG 対数座標
番号 略号 名 称 5 POL POLAR 極座標 6 BPL BIPOLAR 双曲線座標 7 ELP ELLIPTIC 楕円座標(未実装)
番号 略号 名 称 10 CYL CYLINDRICAL 正距円筒図法 11 MER MERCATOR メルカトール図法 12 MWD MOLLWEIDE モルワイデ図法 13 HMR HAMMER ハンメル図法 14 EK6 ECKERT 6 エッケルト第6図法 15 KTD KITADA 北田楕円図法 20 CON CONICAL 正距円錐図法 21 COA CONICAL EQ.AREA ランベルト正積円錐図法 22 COC CONICAL ランベルト正角円錐図法 CONFORMAL 23 BON BONNE ボンヌ図法 30 OTG ORTHOGRAPHIC 正射図法 31 PST POLAR STEREO ポーラーステレオ図法 32 AZM AZIMUTHAL 正距方位図法 33 AZA AZIMUTHAL ランベルト正積方位図法 EQ.AREA
番号 略号 名 称 99 USR USER ユーザー定義関数
ユーザー定義座標系はユーザーが必要な変換関数を用意するものである. 詳しくは [here]節 (STPACK) を参照のこと.
地球流体電脳ライブラリでは地図投座標も普通のU座標系の 一つとして扱われる. 地図投影法には実にさまざまな種類があり, すべてを解説するためには1冊の本が必要であるが, ここでは地球流体電脳ライブラリを利用するために知っておくべき基本的事柄 を解説する. なお,地図学の詳しい解説は 野村 正七 著 「地図投影法」 などを参考にさ れたい(ただし,この本は絶版).
地図投影法は基本的に「球面を何らかの方法で2次元平面に投影する」方法で ある. 実際の地球は完全な球面ではなく回転楕円体に近いので, 厳密な地図投影を行なうためには回転楕円体の表面を平面に投影しなければ ならない. しかし,本ライブラリでは回転楕円体からの投影ではなく, 球面からの投影のみをサポートする. なお,投影された図形は投影法によっては3次元的な雰囲気を持つが, 地図投影座標はあくまでも2次元座標であることに注意されたい.
地図投影の多くの図法では幾何学的な方法で球面から平面に投影される. その際の平面の形状によって次のようにいくつかの図法に分類される.
これらの円筒や円錐の軸,または方位図法における接点からの垂線が 地球の自転軸と一致するものを正軸法, 直交するものを横軸法, 斜めに交わるものを斜軸法と呼ぶ. 一般に,円筒図法は全球の表示に向いており, 円錐図法は中緯度の表示に向いている.円筒図法 地球儀をこれに接する円筒の中に位置付け, 何らかの方法で経緯線を円筒に投影して, 展開する図法. 円錐図法 地球儀をこれに接する直円錐の中に位置付け, 何らかの方法で経緯線を円錐に投影して, 展開する図法. 方位図法 地球儀上の一点でこれに接する平面を設定し, 何らかの方法で経緯線をこの平面に投影する図法. 便宜図法 上記以外の図法.
地図投影では球面を平面に投影するため, どうしてもひずみが生じてしまう. そこで,多くの図法では 面積 または 角度 のどちらかが 保存されるように工夫されている. 原理的に,この二つを同時に保存するような投影は不可能である. この様な保存性に関する性質によって次のように分類される.
正積図法 地図上のどこでも面積関係が正しく表現される図法. 正角図法 地図上のどこでも局所的な角度が正しく表現される図法. 正距図法 経線, 緯線または方位線上で,長さが正しく表現される 図法.
本ライブラリでは以下のような地図投影がサポートされる.
番号 図 法 正積 正角 正距 10 正距円筒図法 × × 経線 11 メルカトール図法 × ○ × 12 モルワイデ図法 ○ × × 13 ハンメル図法 ○ × × 14 エッケルト第6図法 ○ × × 15 北田楕円図法 ○ × ×
番号 図 法 正積 正角 正距 20 正距円錐図法 × × 経線 21 ランベルト正積円錐図法 ○ × × 22 ランベルト正角円錐図法 × ○ × 23 ボンヌ図法 ○ × ×
番号 図 法 正積 正角 正距 30 正射図法 × × × 31 ポーラーステレオ図法 × ○ × 32 正距方位図法 × × 方位線 33 ランベルト正積方位図法 ○ × ×
ハンメル図法は地図学上, ランベルト正積方位図法の変種として方位図法に分類されるが, その形状や用途はむしろ円筒図法に近いので, ここでは便宜的に円筒図法に分類する. これらの図法すべてについて,正軸法,横軸方, 斜軸法が可能である.
なお,普通の地図投影法には含まれないが, 正射図法の変形として人工衛星から眺めたような投影法 (Satellite View) もサポートされている. 普通の正射図法は地球儀を無限遠から眺めたような投影になっているが, これを有限の位置から眺めたような投影に変形したものである.
上記のU座標を2次元V座標に変換する 正規化変換に必要なパラメータには以下のものがある. これらはGRPH1の内部変数を管理するルーチン SGpGET/SGpSETにより 一つずつ設定/参照できるが, 同種のパラメータをまとめて設定するユーティリティーも用意されている.
これらのパラメータは SGSVPT/SGQVPT によって 設定/参照できる.
地図投影座標系の場合には, GRPH1 の範囲ではこの情報を必要としないが, GRPH2 のパッケージが「注目している緯度経度範囲」という意味で 参照する場合がある. この場合には,一般にビューポートとウインドウは一致しない.
これらのパラメータは SGSWND/SGQWND によって 設定/参照できる.
これらのパラメータは SGSSIM/SGQSIM によって 設定/参照できる.
これらのパラメタと,一般に3次元の回転角を指定するのに使われる 「オイラーの角 (θ,φ,ψ)」 との関係は, θ = π/2 - PLY, φ = PLX, ψ=PLROT である. (オイラーの角の意味については,数学辞典などを参照のこと.)
これらのパラメータは SGSMPL/SGQMPL によって 設定/参照できる.
実際の操作としては, UC と TC(投影座標)が一致している状態を初期状態として,
TC から VC への変換は上記の相似変換パラメタによって 決められる. その際地図投影のタイプによって VC 原点に投影される TC の 値が異なる.
図 法 原点に投影される TC 円筒図法 (0, 0) 方位図法 (90, 0) 円錐図法 円錐の頂点
原点に投影されるこれら TC の値は,オイラーの角を (0, 0, 0) と したとき,すなわち (PLX,PLY,PLROT) = (0, 90, 0) と した場合に対応する.
通常の円筒図法や円錐図法(正軸法)で, 経度λの経線を中央経線とするには, (PLX, PLY, PLROT) =(λ,90., 0) とする.
方位図法において,経度・緯度 (λ,φ) を中心とした 地図を描くには, (PLX, PLY) =(λ,φ) とし, 必要に応じて PLROT を指定する PLROT = 0 の時, 必ずUCの南極が原点の下になる.
横軸法の円筒図法などでは,(PLX,PLY)として赤道上の点を 指定する. PLROT = 0 の時, UCの南極が中央経線上に投影される. 例えば,北極海,大西洋,南極環海を一つながりの海として 横軸法で表すには,(PLX, PLY, PLROT) = (60., 0., -90.) とする.
これらのパラメータは SGRGET/SGRSET によって 設定/参照できる.
これらのパラメータは SGRGET/SGRSET によって 設定/参照できる.
U座標系で描画するためには, SGFRM を呼んだ後でかつ描画をはじめる前に 変換関数を決めるパラメータを指定しておかなければならない. 指定すべきパラメータは座標系によって異なるが, 主要なパラメタはすべて SGpGET/SGpSETによって管理されている. ただし,SGpGET/SGpSETは単に掲示版の役目をしているだけなので, 設定したパラメタの値は,変換関数を確定するルーチン SGSTRF を呼ぶことで有効になる. 変換関数のパラメタを1つ1つ設定するのは面倒なので, まとめてパラメタを設定するルーチンが用意されており, 普通はそちらを使ってパラメタの設定を行なう.
具体的に変換パラメタを設定するにはSGFRM のあとで次のように コーディングする.
直角座標系
CALL SGSVPT(VXMIN, VXMAX, VYMIN, VYMAX) CALL SGSWND(UXMIN, UXMAX, UYMIN, UYMAX) CALL SGSTRN(ITR) CALL SGSTRF
直交座標系
CALL SGSVPT(VXMIN, VXMAX, VYMIN, VYMAX) CALL SGSSIM(SIMFAC, XOFF, YOFF) CALL SGSTRN(ITR) CALL SGSTRF
地図座標系
CALL SGSVPT(VXMIN, VXMAX, VYMIN, VYMAX) CALL SGSSIM(SIMFAC, XOFF, YOFF) CALL SGSMPL(PLX, PLY, PLROT) CALL SGSTRN(ITR) CALL SGSTRF円錐投影の場合は,これ以外に SGRSET によって標準緯線の緯度 (STLAT1, STLAT2) を与えておく必要がある.
これらのパラメタは 変換関数を確定するルーチン SGSTRF が 呼ばれる前であれば,どのような順番で指定しても構わない. 変換関数名または略号を指定して,変換関数番号を返す関数も用意されている.
番号 1 直角座標 2 円筒座標 3 球座標
3 次元座標系は2 次元座標系と異なり対数軸のしていは関数番号ではなく, 対数スイッチ(後述)によって指定する.
上記の3次元U座標を3次元V座標に変換する 正規化変換に必要なパラメータには以下のものがある. これらはGRPH1の内部変数を管理するルーチンSGpGET/SGpSETにより 一つずつ設定/参照できるが, 同種のパラメータをまとめて設定するユーティリティーが SCPACK の中に用意されている.
これらのパラメータは SCSVPT/SCQVPT によって 設定/参照できる.
これらのパラメータは SCSWND/SCQWND によって 設定/参照できる.
これらのパラメータは SCSLOG/SCQLOG によって 設定/参照できる.
これらのパラメータは SCSORG/SCQORG によって 設定/参照できる.
3次元のU座標系で描画するためには,2次元座標系と同様 SGFRM を呼んだ後でかつ描画をはじめる前に 変換関数を決めるパラメータを指定しておかなければならない. これらのパラメタの値は,変換関数を確定するルーチン SCSTRF を呼ぶことで有効になる. 3次元のパラメタは2次元のパラメタとは独立である.
主要なパラメタはすべて SGpGET/SGpSETによって管理されているが, 変換関数のパラメタを1つ1つ設定するのは面倒なので, まとめてパラメタを設定するルーチンが用意されており, 普通はそちらを使ってパラメタの設定を行なう.
具体的に変換パラメタを設定するにはSGFRM のあとで次のように コーディングする.
直角座標系
CALL SCSVPT(VXMIN3, VXMAX3, VYMIN3, VYMAX3, VZMIN3, VZMAX3) CALL SCSWND(UXMIN3, UXMAX3, UYMIN3, UYMAX3, UZMIN3, UZMAX3) CALL SCSTRN(ITR3) CALL SCSTRF
円筒座標,球座標
CALL SCSORG(SFAC3, VXORG3, VYORG3, VZORG3) CALL SCSTRN(ITR3) CALL SCSTRF
透視変換とは,任意の視点から3次元空間を眺めて遠近感を出す変換である. 電能ライブラリにおいては,3次元V座標系から2次元R座標系への変換を指す.
一般に,この変換では3次元空間上の平行線は投影された2次元平面上では 平行にならない. 視点を無限遠に持っていけば,平行線は平行線に投影されるが, そのように投影された図形はかえって不自然に感じられる.
透視変換を行なうには,「視点」 と「焦点中心」を設定 しなければならない. 視点とは読んで字の通り3次元空間を眺める位置であり, カメラのレンズの位置であると思えば良い. これに対して,焦点中心はカメラのフィルム上の焦点ではなく, 注目している点,すなわち視点から「見つめる点」である. この視点と焦点中心を結ぶ線が「視線」 である.
透視変換によって 3次元図形の各点は, その点と視点を結ぶ線が 「投影面」と交わる点に投影される. 地球流体電脳ライブラリでは, 投影面は焦点中心を通り,視線に垂直な面である.
2次元座標系の場合,2次元のV座標系を3次元のV座標系の1平面に割り付ける ことで,透視変換が可能になる. この際に割り付けることができる平面は,3次元 X, Y, Z 座標軸のいずれかに 垂直な平面であり,斜めの面に割り付けることはできない. (斜めに見るには視点を動かせば良い)
透視変換のパラメタも SGFRM を呼んだ後でかつ描画をはじめる前に 変換関数を決めるパラメータを指定しておく. これらのパラメタの値は,変換関数を確定するルーチン SCSPRJ を呼ぶことで有効になる. 透視変換のパラメタは,2次元およおよび3次元正規化変換と独立である.
主要なパラメタはすべて SGpGET/SGpSETによって管理されているが, まとめてパラメタを設定するルーチンがSCPACK に用意されており, 普通はそちらを使ってパラメタの設定を行なう.
具体的に変換パラメタを設定するにはSGFRM のあとで次のように コーディングする.
CALL SCSEYE(XEYE3, YEYE3, ZEYE3) CALL SCSOBJ(XOBJ3, YOBJ3, ZOBJ3) CALL SCSPRJ
そのほかのパラメタは必要に応じて SGpSETで指定する.
なお,2次元平面を3次元平面に割り付けるには, SCSPRJ の前に,
CALL SCSPLN( IXC3, IYC3, SEC3)を呼ぶ. これにより,2次元平面上の描画ルーチンを 3次元空間内の平面上で使うことができるようになる.
図形を構成する基本要素を出力プリミティブという. GRPH1 の出力プリミティブには次のものがある.
これら6つのプリミティブのうち,トーンプリミティブ以外の5つは すべて線分で構成される. 線分にはラインインデクスとラインタイプ呼ばれる属性がある. また,トーンには,トーンパターン番号という属性がある. これらの属性は,以下のように定義されている.
GRPH1 で扱う座標系には曲線座標系も含まれるので, 線分やトーンの境界を指定する座標点の間を直線で つなぐと不都合が起こる場合がある. そこで,座標点の間をいくつかに分割して,補間する機能がある. さらに, すべてのプリミティブはある境界でのクリッピングの対象となる.
GRPH1 で描かれる線分の太さと色はラインインデクスと呼ばれる 3桁の整数(nnm)で指定される. 線の太さと色のうちどちらか一方しか変えられないような デバイスに出力する場合でも, ラインインデクスの異なる2本の線が識別できるようにするため, ラインインデクスは次のような規則にしたがって太さと色に対応づけられる.
線の太さと色が両方変えられるようなシステムでは, 上位2桁(nn=0- 99)が色番号,下位1桁(m=0- 9)が線の太さを表す. 色番号は,1から5 までは標準的に
1: 白または黒(フォアグラウンド) 2: 赤 3: 緑 4: 青 5: 黄
と決められているが, それより大きな番号に関しては colormap ファイルの定義による. またm: 1(細)→ 9(太)となっている. 線の太さだけが変えられるような出力装置では, m=0のときに限ってnnをmとして読みかえる. また,線の色だけがかえられるような出力装置では, nn=0のときに限ってmをnnとして読みかえる. したがって線の太さと色を明示したいとき以外は, 1桁のラインインデクスを指定しておけば, とりあえず装置に固有な方法によって線分は識別可能となる.
ラインタイプとは,実線, 破線などの線種である. 1から4までの番号にはあらかじめ以下のタイプが決められている.
1: 実線 2: 破線 3: 点線 4: 1点鎖線
その他の0以外の整数は下位Nビット (Nは内部変数'NBITS'で決まる値. 初期値は16; [here]節参照) のビットパターンを用いて線種が設定される. たとえばN=16でITYPE = Z'0000F0F0' (16進定数)のとき, '4bits ON 4bits OFF 4bits ON 4bits OFF' のような破線が設定される. 1ビット当たりの長さは内部変数'BITLEN'が決める. ラインタイプの作画例は[here]節参照.
トーンパターン番号には色の情報と, パターンの情報が両方含まれており, 下位3桁がパターン番号,それより上位の桁は色を指定する. 色を指定しない (3桁の番号だけ指定)場合は, フォアグラウンド(色番号1) と解釈される.
パターン番号の最上位桁は,パターンの種類をあらわす.
0: ドット 1: 横線 2: 斜線(右上がり) 3: 縦線 4: 斜線(左上がり) 5: 格子(縦横) 6: 格子(斜め)
2桁めは,ドットの大きさや斜線の太さを0から5の間で指定する. 値が大きくなるにつれてドットは大きくなり斜線は太くなる. 最下位桁はドットや斜線の密度を0から5の間で指定する. 値が大きくなるにつれてドットや斜線の密度があがる. ただし0のときは何も描かれない.
パターン番号として999を指定するとべたぬりとなる.
カラーの端末やカラーのプリンターでは,色を指定したべた塗りによる塗りわ けがしばしばおこなわれる.このプログラムをカラーがサポートされない環境 で実行しても,それなりな見わけがつくようにドットによる塗りわけとして表 現するようなオプションも用意されている.
これらの組合せ以外の整数値はパターンが定義されていない. トーンパターンテーブルについては [here]- [here]節を参照のこと.
補間機能には次の2つがある.
この機能に関するSGpGET/SGpSETのパラメタは以下の通り.
LLNINT (L) 線形補間を行なうかどうか指定するフラグ (省略値.FALSE.). LGCINT (L) 大円補間を行なうかどうか指定するフラグ (省略値.TRUE.). RDX, (R) 補間間隔. RDY 1セグメントの長さがこれらの値を越えないように 補間される(省略値 (5., 5.)).
クリッピングは次の場所で行なわれる.
この機能に関するSGpGET/SGpSETのパラメタは以下の通り.
LCLIP (L) ビューポートでのクリッピングを 行なうかどうか指定するフラグ (省略値.FALSE.). VXMIN, VXMAX, VYMIN, (R) ビューポート. 通常 SGSVPT VYMAX により設定される. TXMIN, TXMAX, TYMIN, (R) TC におけるクリッピング境界 TYMAX (省略値は -180.0, +180.0, -90.0, +90.0). IRMOD (I) トーンの境界線をクリッピングした 時に, 右回りに接続するか,左回りに接続 するか 指定するパラメタ. ( [here] 参照) (省略値0).
ビューポートにおけるクリッピングは 'LCLIP' によって ON/OFF できるが,他のクリッピングは常におこなうようになっている. 正射図法で TC におけるクリッピング境界を省略値のまま使うと, 裏側の線分なども描くことになる. 表側だけを描くためには'TYMIN' を 0 にする.
旧バージョンではハードフィルはクリッピングの対象になっていなかったが, DCL ver.5 からハードフィルもソフト的にクリッピング できるようになった. すなわち,トーンのクリッピングはハードウェアが行うのではなく, 指定された領域とクリッピング範囲が重なる部分を指定する境界点を生成して, そのデータをトーンルーチンに渡すようになっている. このクリップされた境界線を求めるアルゴリズムは, 境界線の向きが決まっていることを前提としている. ここで,境界線の向きとは境界線を指定する点列を, 時計回りに指定するか,反時計回りに指定するかということを言う. このアルゴリズムは旧来のトーンの塗りつぶし規則と整合性が悪いが, 地図上 (T 座標系)では境界線の向きがわからないと内側と外側を 判断することができない.
具体的にはトーンをクリッピングする手順は次のようになる.
したがって, 境界線が交わるような図形を塗りつぶす時に, クリッピングを行うのは危険である. クリッピングを行う時は,安全のために
境界線の向きを決めて,小さな単純な図形にする様にしていただきたい.
なお,図形の外側を塗りつぶしたい時には, その図形が確実にクリッピングされるように領域を2分割し, クリッピング領域(ビューポート)を設定しなおして, 2度トーンルーチンを呼ぶ.
R座標系はx軸,y軸ともに0 から 1の値をとり, 描画範囲は 1:1 の縦横比を持つ. これに対して,実際のデバイスの縦横比はいろいろである. 描画範囲とデバイスの縦横比が一致しない時には, 通常 SGFRM が呼ばれた段階で, デバイスの中央に描画範囲が最大内接するように ワークステーション変換が設定される.
しかし,デバイスの描画領域をいっぱいに使いたかったり, 逆に,図の回りに適当なマージンをとりたい場合もある. そのような時には,GRPH1/SLPACK を使う. SLPACK は基本的にワークステーション変換を設定するもので, 描画範囲の縦横比を変える以外に, マージンにタイトルなどの文字列を書いたり 1枚の紙に複数のフレームを並べたりする機能がある. この様な機能をレイアウト機能と呼ぶ.
このレイアウト機能を使うには,デバイスをオープンした後で SGFRM を呼ぶ前に,適切な設定を行なう. 例えば,
CALL SGOPN(IWS) CALL SGDIV('S', 4, 3) ! 1ページを 4x3 に分割する. CALL SGFRM ..........CALL SGFRM ..........
CALL SGCLS
とすることで,1ページに12枚のフレームを設定することができる.
NUMAGUTI Atusi <a1n@gfdl.gov> Last Modified: Thu Aug 31 13:04:50 EDT 1995