// [このプログラムの目的]先端が尖り、付け根がくびれた花びらのモデル flower_y1pre,2013年6月17日(月)



// file name: flower_y1pre.c



#include< stdio.h>

#include< math.h>



void main(void)

{

	double a,pi;// pi は円周率

	double r;// 花びらの元の図形の動径

	double q1,q2,b;// 花びらの元の図形の変形の度合いを与える定数

	double f,df;// 花びらの元の図形に関する媒介変数、および、その変分

	double fmin,fmax;// f の最小値と最大値

	int nf;// f の分割数

	double x,y;// 花びらの元の図形の直交座標



	double d;// 花びらを縦方向に伸縮する伸縮率

	double k;// 花びらの角度を広げる

	double rr,ff;// 花びらの動径と位相角

	double xx[20001],yy[20001];// 花びらの直交座標、メモリ容量の上限に注意

	int i,imax;



	FILE *fp;



//  定数設定

	pi=3.14159265;



	a=1;//    a=1

	q1=1;//   q1=1

	q2=2;//   q2=2

	b=0.1;//  b=0.1

	d=8;//    d=1

	k=1;//    k=1



//  他のパラメータ設定

	fmin=-pi/2;

	fmax=3*pi/2;



	nf=100;



	df=(fmax-fmin)/nf;// 変換前の位相角 f のプロット間隔



	i=0;



// 主計算

	for(f=fmin;f< fmax;f=f+df) //  1個の花びらを通過する位相角 f の掃引

	{

		i++;



		r=(a/(1+(1/q1)*(sqrt(fabs(sin(f/2-pi/4))))))/(1+(1/q2)*sqrt(fabs(sin(f/2+pi/4))));// 花びらの元の図形の動径



		x=r*cos(f);// 花びらの元の図形の直交座標

		y=b*r*sin(f)+b*(a/(1+(1/q1)));// 花びらの元の図形の直交座標



		rr=sqrt(x*x+y*y);// 元の図形から作られた花びらの動径の計算



		if(x==0)// 元の図形から作られた花びらの位相の計算

		{

			ff=pi/2;

		}

		else

		{

			if(x>0)

			{

				ff=asin(y/rr);

			}

			else

			{

				ff=pi-asin(y/rr);

			}

		}



		ff=k*(ff-pi/2)+pi/2;// 花びらの角度を広げる



		xx[i]=rr*cos(ff);

		yy[i]=d*rr*sin(ff);



		printf("i=%d,x=%f,y=%f\n",i,xx[i],yy[i]);

	}

	

	i++;

	xx[i]=xx[1];// 更に、始めと終わりの隙間を埋めるための保存

	yy[i]=yy[1];



	imax=i;



// 計算データ[花びらの(x,y)座標]をテキストファイル(flower_y1pre.txt)に書き込む

	fp=fopen("flower_y1pre.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





戻る