// [このプログラムの目的]5種のハート形曲線を描くこと,2007年12月25日(火)

// 曲線の方程式:x>0 のとき x*x+(y-bx)**2=1,   ただし、b=>0、x<0 のとき x*x+(y+bx)**2=1

// file name: heart_curve_a2.c



#include< stdio.h>

#include< math.h>



void main(void)

{

	double x,y,b,db,bmax;

	int i,imax,n,nmax,j;

	double xmax,dx;

	double xx[2005],yy[10][1005];// 配列を格納するメモリ容量の上限に注意



	FILE *fp;



// パラメータ設定

	xmax=1;// x の最大値

	dx=xmax/200;// x のプロット間隔

	bmax=1;

	db=bmax/5;



	i=0;



// 計算実行

	for(x=0;x<=xmax;x=x+dx)

	{

		i++;

		n=0;



		xx[i]=x;



		for(b=0;b<=bmax;b=b+db)

		{

			n++;



			y=sqrt(1-x*x)+b*x;

			yy[n][i]=y;



			printf("i=%d,n=%d,b=%f,x=%f,y=%f\n",i,n,b,x,y);

			}

		}



	for(x=xmax;x>=0;x=x-dx)

	{

		i++;

		n=0;



		xx[i]=x;



		for(b=0;b<=bmax;b=b+db)

		{

			n++;



			y=-sqrt(1-x*x)+b*x;

			yy[n][i]=y;



			printf("i=%d,n=%d,b=%f,x=%f,y=%f\n",i,n,b,x,y);

		}

	}



	for(x=0;x>=-xmax;x=x-dx)

	{

		i++;

		n=0;



		xx[i]=x;



		for(b=0;b<=bmax;b=b+db)

		{

			n++;



			y=-sqrt(1-x*x)-b*x;

			yy[n][i]=y;



			printf("i=%d,n=%d,b=%f,x=%f,y=%f\n",i,n,b,x,y);

		}

	}



	for(x=-xmax;x<=0;x=x+dx)

	{

		i++;

		n=0;



		xx[i]=x;



		for(b=0;b<=bmax;b=b+db)

		{

			n++;



			y=sqrt(1-x*x)-b*x;

			yy[n][i]=y;



			printf("i=%d,n=%d,b=%f,x=%f,y=%f\n",i,n,b,x,y);

		}

	}



	imax=i;

	nmax=n;



	j=0;



// 計算データのテキストファイルへの書き込み

	fp=fopen("heart_curve.txt","w");



	if(fp==NULL)

	{

		printf("FILE OPEN ERROR\n");

	}

	else

	{

		for(i=1;i<=imax;i++)

		{

			fprintf(fp,"%f,%f,%f,%f,%f,%f,%f\n",xx[i],yy[1][i],yy[2][i],yy[3][i],yy[4][i],yy[5][i],yy[6][i]);

		}



		fflush(fp);

		fclose(fp);

	}



	printf("end\n");

}// the end of the program





戻る