* reidai1.f -- サブルーチン呼び出しによるグラフ描き program reidai1 * 変数の宣言 * a: 区間の左端の座標, b: 区間の右端の座標, margin: 余白の大きさ real Pi,a,b,margin integer N,i real h,x,f external f * Pi = 4.0 * atan(1.0) a = 0.0 b = 2.0 * Pi margin = (b - a) / 20 * x 軸の分割の仕方の決定 write(*,*) ' x軸の区間の分割数を入力して下さい' read(*,*) N h = (b - a) / N * グラフィックスの初期化 call openpl call fspace2(a - margin, -3.0, b + margin, 3.0) * 始点のセット call fmove(a, f(a)) * グラフ上の点を順に結ぶ do i = 1, N x = a + i * h call fcont(x, f(x)) end do * 図形を記録する call mkplot("reidai1.plot") * グラフィックスの後始末 call closepl end ************************************************* real function f(x) real x f = sin(x) + sin(3.0 * x) + sin(5.0 * x) end
/* * reidai1.c -- サブルーチン呼び出しによるグラフ描き * How to compile: ccx reidai1.c */ #include <stdio.h> #include <math.h> #include <fplot.h> int main() { /* 変数の宣言 * a: 区間の左端の座標, b: 区間の右端の座標, margin: 余白の大きさ */ double Pi, a, b, margin; int N, i; double h, x, f(double); Pi = M_PI; a = 0.0; b = 2.0 * Pi; margin = (b - a) / 20; /* x 軸の分割の仕方の決定 */ printf("x軸の区間の分割数を入力して下さい: "); scanf("%d", &N); h = (b - a) / N; /* グラフィックスの初期化 */ openpl(); fspace2(a - margin, -3.0, b + margin, 3.0); /* 始点のセット */ fmove(a, f(a)); /* グラフ上の点を順に結ぶ */ for (i = 1; i <= N; i++) { x = a + i * h; fcont(x, f(x)); } /* 図形を記録する */ mkplot("reidai1.plot"); /* グラフィックスの後始末 */ closepl(); return 0; } double f(double x) { return sin(x) + sin(3.0 * x) + sin(5.0 * x); }
全体が、主プログラム (Fortran では、program reidai1, C では関 数 main()) と関数副プログラム f の 2 つの部分からなっている。 主プログラムの中で呼び出している openpl, fspace2, fmove, fcont, closepl が fplot の命令である。
openpl() は他のすべてのグラフィックス命令に先立って呼び出す。これ によって図を描くためのウィンドウがオープンされる。
fspace2() はウィンドウに座標を割り振るために用いる。
Fortran の場合 call fspace2(x0,y0,x1,y1)とするとウィンドウの左下隅が (x0, y0)、右上隅が (x1,y1) に なる (当然 x0x1, y0y1 でなければならない)。扱う問題に応じて適当 な値を見い出して呼び出す必要がある。 次の fmove(), fcont() は後回しにして、最後の closepl() を先に解説しよう。これは openpl() と対になる命令で、 図形描画を終了させて後始末をするものである。実行がここに到達すると、プ ログラムは利用者がマウスでウィンドウをクリックするのを待つ状態になる。
C の場合 fspace2(x0,y0,x1,y1);
ここまで解説した openpl(), fspace2(), closepl() は 実際には画面に何も描かないが、何時でも必要である。つまりプログラムは必 ず
|
|
fmove() は「ペンを移動する(=move)」, fcont() は「線を引 きながら (つなぎながら=continue) ペンを動かす」という命令である。つま り、これらの命令では仮想のペンを考えて、それを移動することにより図形を 描画する3.5。 ではコンパイルしてから実行してみよう。
Fortran の場合 |
oyabun% f77x reidai1.f |
Cの場合 |
oyabun% ccx reidai1.c |