next up previous contents
Next: 5.3.3 読んでみよう Up: 5.3 GLSC のサンプル・プログラム Previous: 5.3.1 何をするプログラムか

5.3.2 ソースプログラムdraw-graph.c

以下のプログラムは http://www.math.meiji.ac.jp/~mk/labo/howto/glsc-progs/に置いてあります。




/*
 * draw-graph.c -- 1変数関数のグラフを描く
 *   コンパイル:  ccmg draw-graph.c
 */


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

#define G_DOUBLE
#include <glsc.h>

double pi;

int main()
{
  int i, n;
  double a, b, c, d;
  double h, x;
  double f(double);
  char title[100];
  double win_width, win_height, w_margin, h_margin;

  pi = 4 * atan(1.0);

  /* 表示する範囲 [a,b]×[c,d] を決定 */
  a = - 10 * pi; b = 10 * pi; c = - 2.0; d = 2.0;

  /* 区間の分割数 n */
  n = 200;

  /* GLSC の開始
     メタファイル名、ウィンドウ・サイズの決定 */
  win_width = 200.0; win_height = 200.0; w_margin = 10.0; h_margin = 10.0;
  g_init("GRAPH", win_width  + 2 * w_margin, win_height + 2 * h_margin);

  /* 出力デバイスの決定 */
  g_device(G_BOTH);

  /* 座標系の定義: [a,b]×[c,d] という閉領域を表示する */
  g_def_scale(0,
              a, b, c, d,
              w_margin, h_margin, win_width, win_height);

  /* 線を二種類用意する */
  g_def_line(0, G_BLACK, 2, G_LINE_SOLID);
  g_def_line(1, G_RED,   0, G_LINE_SOLID);

  /* 表示するための文字列の属性を定義する */
  g_def_text(0, G_BLACK, 3);

  /* 定義したものを選択する */
  g_sel_scale(0); g_sel_line(0); g_sel_text(0);

  /* 座標軸を描く */
  g_move(a, 0.0);  g_plot(b, 0.0);
  g_move(0.0, c); g_plot(0.0, d);

  /* タイトルを表示する */
  sprintf(title, "Bessel function J0(x)  (%g<=x<=%g)", a, b);
  g_text(20.0, 10.0, title);

  /* 刻み幅 */
  h = (b - a) / n;
  /* グラフを描くための線種の選択 */
  g_sel_line(1);
  /* 折れ線でグラフを描く */
  g_move(a, f(a));
  for (i = 1; i <= n; i++) {
    x = a + i * h;
    g_plot(x, f(x));
  }

  /* ユーザーのマウス入力を待つ */
  printf("終りました。X の場合はウィンドウをクリックして下さい。\n");
  g_sleep(-1.0);
  /* ウィンドウを閉じる */
  g_term();
  return 0;
}

double f(double x)
{
  /* 0 次 Bessel 関数 */
  return j0(x);
}


next up previous contents
Next: 5.3.3 読んでみよう Up: 5.3 GLSC のサンプル・プログラム Previous: 5.3.1 何をするプログラムか
Masashi Katsurada
平成18年4月28日