* 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) に なる (当然 x0
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 |