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); |
※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 |