// [このプログラムの目的]1個のハート形曲線を描くこと
                                 //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_a1.c
#include< stdio.h>
#include< math.h>
void main(void)
{
	double x,y,b;
	int i,imax,j;
	double xmax,dx;
	double xx[10005],yy[10005];
            // 配列を格納するメモリ容量の上限に注意
	FILE *fp;
// パラメータ設定
	b=0.8;
	xmax=1;// x の最大値
	dx=xmax/1000;// x のプロット間隔
	i=0;
// 計算実行
	for(x=0;x<=xmax;x=x+dx)
	{
        	i++;
		xx[i]=x;
		y=sqrt(1-x*x)+b*x;
                yy[i]=y;
		printf("i=%d,b=%f,x=%f,y=%f\n",i,b,x,y);
	}
	for(x=xmax;x>=0;x=x-dx)
	{
        	i++;
		xx[i]=x;
		y=-sqrt(1-x*x)+b*x;
		yy[i]=y;
		printf("i=%d,b=%f,x=%f,y=%f\n",i,b,x,y);
	}
	for(x=0;x>=-xmax;x=x-dx)
	{
		i++;
		xx[i]=x;
		y=-sqrt(1-x*x)-b*x;
		yy[i]=y;
        	printf("i=%d,b=%f,x=%f,y=%f\n",i,b,x,y);
	}
	for(x=-xmax;x<=0;x=x+dx)
	{
		i++;
		xx[i]=x;
		y=sqrt(1-x*x)-b*x;
		yy[i]=y;
                intf("i=%d,b=%f,x=%f,y=%f\n",i,b,x,y);
	}
        imax=i;
       	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\n",xx[i],yy[i]);
		}
		fflush(fp);
		fclose(fp);
	}
	printf("end\n");
}// the end of the program


戻る

Revised on Jun. 02, 2020, Jun. 06, 2020.