これまでは、ウィンドウ内では左下隅を(0,0)とした2次元座標をとり、左下隅から縦横にそれぞれ何ドット離れているかで位置を指定した。 しかし、計算機シミュレーションの様子を表示させる場合、位置はドット数ではなく対象の物理的な位置で表わしたくなるだろう(mm単位やkm単位かもしれないし、もしかしたら秒単位の時間やあるいはまったく別の単位で表わしたいかもしれない)。 物理的な単位とドット数を換算するようにプログラムを書いてもいいが、eggx_window命令を使えばその換算を自動的にしてくれるように設定できる。 指定はeggx_window(w,x1,y1,x2,y2)のようにし、実数変数の組(x1,y1)でウィンドウ左下隅の座標をまた(x2,y2)で右上隅の座標を与える。
w=eggx_gopen(100,100); eggx_window(w,1,2,3,6); |
これでは実感できないと思うので、以下のプログラムとその実行結果を比較して、なにが起きているか考えてみること。
#include<stdio.h> #include<eggxlib.h> main(){ int w1,w2; int i; double x,y; w1=eggx_gopen(100,100); w2=eggx_gopen(100,100); eggx_window(w1,2,2,5,8); eggx_window(w2,1,1,7,4); eggx_drawrect(w1,2,2,2.5,2.5); eggx_drawrect(w2,2,2,2.5,2.5); eggx_msleep(5000); } |
これまでは背景の上に白で図形を描いてきたが、もちろんこの色は好きに変更できる。色は細かく指定できるが、ここでは色を名前で指定するeggx_newcolor命令だけを挙げておく。使い方は背景色のeggx_gsetbgcolorと同じである。
#include<stdio.h> #include<eggxlib.h> main(){ int w1; int i; double x,y; w1=eggx_gopen(100,100); eggx_window(w1,0,0,4,4); eggx_gsetbgcolor(w1,"blue"); eggx_gclr(w1); eggx_newcolor(w1,"red"); eggx_fillrect(w1,1,1,2,2); eggx_newcolor(w1,"white"); eggx_drawrect(w1,1,1,2,2); eggx_msleep(5000); } |
直線はeggx_line命令でひく。これを他の図形より後回しにしたのは、使い方が少々違うからである。eggx_lineの動作は「ペンの移動」という概念に近く、指定の位置まで「ペンを紙につけたまま移動」(要するに線がひかれる)するか「ペンを上げて移動」(移動するだけ)のどちらの動作をするかを指定する。また、最後にeggx_lineがよばれた際のペンの位置が記憶されており、eggx_line命令では「どこからどこまで」のうちで「どこまで」だけを指定する。この方法は一本の線をひくだけでもeggx_line命令を2度使わなくてはならないが、折れ線を描くには便利なものである。たとえば
#include<stdio.h> #include<eggxlib.h> main(){ int w1; int i; double x,y; w1=eggx_gopen(100,100); eggx_window(w1,0,0,4,4); eggx_gsetbgcolor(w1,"blue"); eggx_gclr(w1); eggx_line(w1,1,1,PENUP); eggx_line(w1,2,1,PENDOWN); eggx_line(w1,2,2,PENDOWN); eggx_line(w1,3,2,PENDOWN); eggx_line(w1,3,3,PENDOWN); eggx_line(w1,4,3,PENDOWN); eggx_msleep(5000); } |