// [このプログラムの目的]1個の卵形面上のスパイラル曲線を描くこと,2004年1月9日(月)
// (z, x) 平面での卵型曲線の方程式:(z*z+x*x)**2=a*(z**3)+(a-b)*z*(x**2), 以下、a=1, b=0.7 の場合、なお、一般的条件は b<=a で、b=0 のときは円となる。)
// file name: egg_spiral.c
#include< stdio.h>
#include< math.h>
void main(void)
{
double z,a,b,c,d;
int i,imax,j;
double pi; // pi=Pi
double zmax,dz;
double xx[10001],yy[10001],zz[10001];
FILE *fp;
// 定数設定
a=1.0; // one of parameters in egg equation
b=0.7; // one of parameters in egg equation
c=10.0; // adjustment coefficient for number of revolution of spiral
d=0.95; // rate of reduction to make sure that trigonometric function "tan" is not divergent
pi=3.1415927;
// 他のパラメータ設定
zmax=a;// the maximum value of z
dz=zmax/4000;// plotting interval of z
// 計算実行
i=0;
for(z=0;z<=zmax;z=z+dz)
{
i++;
xx[i]=(sqrt(((a-b-2*z)+sqrt(4*b*z+(a-b)*(a-b)))*z/2))*cos(c*tan(pi*(z-a/2)*d/a));
yy[i]=(sqrt(((a-b-2*z)+sqrt(4*b*z+(a-b)*(a-b)))*z/2))*sin(c*tan(pi*(z-a/2)*d/a));
zz[i]=z;
printf("i=%d,x=%f,y=%f,z=%f\n",i,xx[i],yy[i],zz[i]);
}
imax=i;
j=0;
// 計算された座標データをテキストファイルに書き込むこと
fp=fopen("egg_spiral.txt","w");
if(fp==NULL)
{
printf("FILE OPEN ERROR\n");
}
else
{
for(i=1;i<=imax;i++)
{
fprintf(fp,"%f,%f,%f\n",xx[i],yy[i],zz[i]);
}
fflush(fp);
fclose(fp);
}
printf("end\n");
}// the end of the program
戻る