C言語でグラフィックス  
  【2】図形の描画と消去 次へ 

(3)座標の変換(GWldcpos関数)

サンプルプログラム 〔gr204.c〕
 ワールド座標系と論理デバイス座標系の大きさの違いを計算する。

#include <stdio.h>
#include <GrWin.h>

int main(void)
{
    int     width = 640, height = 400;
    int     zx, zy, xy;             /* 座標系計算用 */

    GWopen(0);
    GWsize(-5, &width, &height);
    GWsize(-3, NULL, NULL);
    GWvport(0.0, 0.0, (float)width / (float)height, 1.0);
    GWindow(0.0, 0.0, (float)width - 1.0, (float)height - 1.0);
    /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
    GWclear(-1);
    GWldcpos(100.0, 100.0, &zx, &zy);       /* ※1 */
    xy = zx / 100 + 1;                      /* ※2 */
    printf("zx=%d  zy=%d  xy=%d\n", zx, zy, xy);
    GWline(100.0, 370.0, 110.0, 370.0);
    GWsetpen(13, 1, 10 * xy, -1);           /* ペンの設定(赤色、幅10) */
    GWline(50.0, 300.0, 150.0, 300.0);
    GWsetpen(16, 1, 20 * xy, -1);           /* ペンの設定(青色、幅20) */
    GWline(100.0, 350.0, 100.0, 250.0);
    /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
    GWquit();
    return 0;
}

int GWldcpos(float X,float Y,int U,int V);
 ワールド座標(X, Y)を論理デバイス座標(U, V)に変換する。

 ※1 ワールド座標(100, 100)を論理デバイス座標に変換している。
 ※2 ワールド座標の1が論理デバイス座標のいくらになるかを計算している。
 printf関数で結果をコンソールに出力している。コンソールとはコンパイル作業や実行をしているウィンドウ(DOS窓やMS-DOSプロンプト)のことである。
 実行結果、ワールド座標(100, 100)は論理デバイス座標(561, 562)であり、xyは6となる。ペンの設定で線幅にxyを乗じて論理デバイス座標系に変換している。

実行結果
zx=561 zy=562 xy=6

 混合モードについては自分で色々と試してみよう。
 このテキストでは、4のCOPYPEN(後から描画した図形で上書きしていく)モードのみとする。


  次へ 
 Copyright © 2005 Hiroshi Masuda 

 

 

inserted by FC2 system