2001年5月2日更新(実習へのコメント等追加)
  関谷トップページへ CG2001 トップページへ  

図形処理・計算処理実習2001 No.2 Glibwv.hを使ったグラフィックス(1)

2001.4.23 KPC 情報技術科  関谷

1.基本グラフィックライブラリGlib.hとその使用例

 MS-DOS版 C言語コンパイラのグラフィックス関数の違いを吸収して、12個の標準ライブラリ関数とその仕様を河西朝雄が1992年5月に決めた。(河西朝雄、C言語によるはじめてのアルゴリズム入門、技術評論社、1992.5.25初版、第8章-pp.313-408)

 Glib.hの主な特徴は次の3点である。   

  • y軸の向きを、上方を正とする座標系を用いる。   
  • ウィンドウをサポートし、実数型データの描画を行う。   
  • タートルグラフィック型ライブラリのサポート  

     そのGlib.hを使って、河西は以下の機能を実現している。

    1. MoveとTurn
    2. 2次元座標変換
    3. ジオメトリック・グラフィックス
    4. 3次元座標変換
    5. 立体モデル
    6. 陰線処理
    7. リカーシブ・グラフィックス

    詳細は、テキストを参照のこと。
     なお、河西は、「Visual Basicによるはじめてのアルゴリズム入門」(1999年6月、技術評論社刊)8章グラフィックスで、VBでのWindowsグラフィックスを示している。

    2.Glibwv.hとSLSによるWindowsグラフィックス

    Slsは平林によるWindowsグラフィックス用のライブラリである。(No.1の平林雅著,Windows95プログラムを10倍簡単に作るを参照)。
     Slsの上に、上記の河西のGlib.hを移植したものが、Glibwv.hグラフィクス・ライブラリである。MoveとTurn、2D、3Dなどのグラフィックス・プログラミングが、Windows上で実現できる。

    (注)Glibwv.hでのWindowsグラフィックス使用上の注意事項

    1. sls\slsにGlibwv.hを追加しているので、そこへのパスが必要。(slsclg.batを使用)
    2. view(ビューポート)を使用する際は、その前に、window(ウィンドウ)で領域を定義してから,使うこと。

    3.Glibwv.hとSlsによるWindowsプログラミング

    3.1 MoveとTurn、2次元座標変換の例題/練習問題

    2次元図形処理の基本プログラム例として、以下の例題/練習問題を紹介する。
    1)Move とTurnでは、例題56 正n角形を描く(n=3〜9)
           練習問題56 渦巻き模様

    2)2次元座標変換では、例題57 対称図形
    例題57 対称複写をビューを使って同じ描画を繰り返した例(C言語ソースプログラム) と実行例 対称複写をビューを使って同じ描画を繰り返した実行例

    練習問題57 回転・拡大コピーをビューを使って描画を繰り返した例(C言語ソースプログラム)と実行例 練習問題57 回転・拡大コピー(view)

    3.2 実習の課題:MoveとTurn、2次元座標変換のプログラムの解析と改造

    例題を参考に、皆さんの描きたい図形データなどを用意して、プログラムを改造し、作品を作りなさい。

    3.3 レポートの提出方法

    図形処理のNo.2Webページとして、各自のWebサイトにアップロードしなさい。Webページの内容は、考察、ソースリスト、実行グラフィックス画面(圧縮済み)とします。
     画面の圧縮には、Wordなどを使うとよい。

     

    注1) 画面のハードコピーとWordへの貼りつけ・圧縮保存の手順は以下のとおり。(窓全体なら、3−4は省略できる)
      1 作図したグラフの画面をアクティブにします。(窓の選択です。)
      2 Alt キーを押したまま,PrintScreenキーを押して, クリップボードに取り込みます。
      3 アクセサリのペイントを起動して,カーソルを左上に移します。( 既にある場合は,すべてを選択して, 切り取り( 削除) してから, 上記の 2をすること。カーソルの移動をします)
      4 ペイントで,編集−貼り付けを実行します。
      5 次に, このなかの必要部分の図を,選択・コピーします。
      6 Wordに貼り付ける。大きさや配置などが変更できます。
      7 Wordで, 「Webページとして保存」で各自のホームドライブの科目のフォルダに保存する。ファイル名.filesフォルダに拡張子jpgのファイルができる。これをWebページのイメージファイルとして利用すること。

    注2) Webページの作り方については、関谷のWebページの「個人ホームページの作成と更新」のページを参照のこと。なお、Windows2000での最新の教室環境での扱いについては、数値解析2001のNo.1ページも参照のこと。
    (ローカルのホームページフォルダは、c:\でなく、各自のサーバのホーム(H:)ドライブに作ること。)
     作業としては、今回分のWebページの作成と、index_htmlファイルの変更−今回のページに対するリンクを作る−が必要になる。

    4.実習とレポートを見てのコメント、色の反転、2次元座標変換、Glibwv.hとそのビューポート座標系についての補足

    4.1 作図プログラムやデータの説明を付けること。

     レポートには、結果の図をどのように作図したかを説明して欲しい。(プログラム名やその内容、実行でのデータなどです)。symbol()関数を使って、図形の上部に表示するのが望ましい。
     そして、作図の元になっている図形の2次元座標変換についての考察をすること。

    4.2 色の反転について

     Wordなどに画面のPrintScreen(クリップボード)を貼り付けると、印刷時に背景が真っ黒になってしまう。描画した線などが分かりにくい。そのため、一度ペイントに貼り付けた後で、色の反転をしてそれを再度コピーして、Wordに貼り付けることもできる。
     しかし、これは面倒である。slsの長方形を排他的論理和で塗りつぶす関数rectfillXOR()を最後に呼べば、色の反転をすることが出来る。これについては、No.1実習で解説していたが、Webでも書いた。

     

    4.3 2次元座標変換式をベクトルで考える

     2次元座標変換(対称移動、平行移動、回転移動、拡大・縮小)式は、河西の8.2節に解説がある。
     これらの変換式については、変換前のある点(x0,y0)を原点からのベクトルの成分表示と考えると、変換後の成分(x、y)は、前のそれぞれの成分ごとの回転による座標を加えることで求まる。これは、三角関数の加法定理を使うものよりも分かりやすい。なお、2Dでの回転は、3Dでのz軸回りの回転に相当する。

    4.4 2次元座標変換の実装方法-自作かグラフィックライブラリを使うか

     2次元座標変換は、Glibwv.hをもとに、河西の8.2節-C言語での関数mirror(),rotate(),multi()などを自作する-で実現できた。
    これに対して、Java2Dでは、AffineTransformクラスとして、準備されており、単にそれらのメソッドを指定するだけで使えるようになっている。 (中山茂著、Java2グラフィックスプログラミング入門、技術評論社、1999.3、pp.228-236)

    4.5 Glibwv.hでのビューポート座標系、タートルグラフィックスturtle.h

     小生の移植では、図8.4での仮想物理座標系(原点をスクリーン左下)を使わず、原点は左上隅として、ビューポートの左下隅と右上隅を指定するようにしている。
     ウィンドウ・ビューポート変換をしない単純なタートルグラフィックス機能のみをslsに移植した関数turtle.hをslsに追加している。これを使った例題56、練習問題56のプログラム例をIドライブのsekiya\図形処理フォルダにコピーしている。

    4.6 ビューポートの効果と自作関数類

     ビューポートを変えることで、同じ図形データでの描画処理をしても、表示される大きさを変えることが出来る。(例題57での実行例を参照のこと。)今回の3次元処理での例のように、違った処理結果の表示も並べて表示できる。
     このように、Glibwv.h自体が、2次元座標変換を利用している。これらの自作関数を準備しておけば、それを使うことで、図形処理が相当に便利になる。
    (注) 河西のテキストのglib.hをslsを使ってGlibwv.hに移植したが、slsに移植する際に引数を追加した関数があり、全く互換にはしていない。その点で、テキストのプログラムのままでは、コンパイルエラーになったりして、解りにくくなっている。