next up previous
Next: 2.3 画像の保存 Up: 2 グラフ描きの簡単なサンプル Previous: 2.1 EGGX の場合のグラフ描きコード

2.2 サンプル・プログラム

drawgraph_eggx.c

/*
 * drawgraph_eggx.c --- drawgraph.c の EGGX 版
 *  コンパイル: egg drawgraph_eggx.c -o drawgraph_eggx
 */

#include <stdio.h>
#include <math.h>
#include <eggxlib.h>

double f(double);

int main()
{
  int win;
  int i, n;
  double a, b, xmin, xmax, ymin, ymax;
  double x, y, dx, pi;

  /* 円周率を求めておく */
  pi = 4 * atan(1.0);
  /* EGGX を初期化する */
  win = eggx_gopen(500, 500);
  /* ウィンドウをクリアする */
  eggx_gsetbgcolor(win, "black"); eggx_gclr(win);
  /* 線の色を赤にする */
  eggx_newcolor(win, "red");

  /* グラフを描く範囲 [a,b] */
  a = 0; b = 2 * pi;
  /* スクリーンに表示する範囲を指定 */
  xmin = a - (b - a) / 10; xmax = b + (b - a) / 10;
  ymin = - 1.2; ymax = 1.2;
  eggx_window(win, xmin, ymin, xmax, ymax);

  /* 1変数関数 f のグラフ */
  n = 100;
  dx = (b - a) / n;
  x = a; y = f(x); eggx_line(win, x, y, PENUP);
  for (i = 1; i <= n; i++) {
    x = a + i * dx; y = f(x); eggx_line(win, x, y, PENDOWN);
  }

  /* PNG形式で保存。"display mygraph.png" で再表示可能。 */
  eggx_saveimg(win, 0, xmin, ymin, xmax, ymax, "pnmtopng", 256, "mygraph.png");
  /* PostScript形式で保存。"ggv mygraph.eps" で再表示可能。 */
  eggx_saveimg(win, 0, xmin, ymin, xmax, ymax, "pnmtops -noturn -rle", 256, "mygraph.ps");
  eggx_saveimg(win, 0, xmin, ymin, xmax, ymax, "convert", 256, "mygraph.eps");
  /* VOGLE のウィンドウ内でキー入力を待つ (入力された文字を捨てる) */
  eggx_ggetch(win);
  /* VOGLE の終了 */
  eggx_gclose(win);
  return 0;
}

double f(double x)
{
  return sin(x) * cos(x);
}

コンパイルには egg コマンドを用いるのが簡単である。 egg コマンドは gcc を呼び出してコンパイルし eggx ライブラリィとリンクしている。 単に egg Cプログラム・ファイル名 とすると、 出来上がる実行形式の名前は a.out になるが、 -o ファイル名 とすることで 自分の好きな名前を指定することもできる。

コンパイルと実行 (1)
a308-06% egg drawgraph_eggx.c
a308-06% ./a.out

コンパイルと実行 (2)
a308-06% egg drawgraph_eggx.c -o drawgraph
a308-06% ./drawgraph

\includegraphics[width=10cm]{mygraph.eps}


next up previous
Next: 2.3 画像の保存 Up: 2 グラフ描きの簡単なサンプル Previous: 2.1 EGGX の場合のグラフ描きコード
Masashi Katsurada
平成22年2月26日