/* * draw-graph.c -- 1変数関数のグラフを描く * GLSCの基本的な機能のみ使っている。 * curl -O http://nalab.mind.meiji.ac.jp/~mk/labo/howto/glsc-progs/draw-graph.c * コンパイル: cglsc draw-graph.c */ #include #include #ifndef G_DOUBLE #define G_DOUBLE #endif #include double pi; int main(void) { 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); }