// [このプログラムの目的]底を尖らせたカージオイドからリンゴ形面を作る,2011年1月19日(水)



// file name: apple_surface.c





#include< stdio.h>

#include< math.h>



void main(void)

{

	double a,pi;// a は元のカージオイドの定数、pi は円周率

	double b;// 縦方向に圧縮する圧縮係数

	double p, q;// 指数関数による横軸と縦軸の伸縮変換率

	double t,dt;// 変換前のカージオイドの位相角[ラジアン]と位相角の変分[ラジアン]

	double R;// 変換前のカージオイドの曲座標の動径

	double fi,fimax,dfi;// (z, x)平面の位相角とその最大値、および、変分[ラジアン]

	double tmin,tmax;// 変換前のカージオイドの位相角の最小値と最大値[ラジアン]

	int i,imax;

	double xx[20001],yy[20001],zz[20001];// メモリ容量の上限に注意



	FILE *fp;



//  定数設定

	pi=3.14159265;

	a=1.0;// 1.0

	b=1.2;// 1.0

	p=0.15;// 0.15

	q=0.08;// 0.08



//  他のパラメータ設定

	tmin=-pi/2;

	tmax=pi/2;

	dt=(tmax-tmin)/100;// 変換前の位相角 t のプロット間隔

	fimax=2*pi;

	dfi=fimax/36;// fi のプロット間隔



//  計算実行

	i=0;

	for(t=tmin;t<=tmax+dt;t=t+dt)

    {

		R=a*(1-sin(t));

		for(fi=0;fi<=fimax+dfi;fi=fi+dfi)

		{

			i++;

			zz[i]=(R*cos(t)*exp(-p*(t-pi/2)*(t-pi/2)))*cos(fi);

			xx[i]=(R*cos(t)*exp(-p*(t-pi/2)*(t-pi/2)))*sin(fi);

			yy[i]=b*R*sin(t)*exp(-q*(t-pi/2)*(t-pi/2));



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

		}

	}

	imax=i;



// 計算データをテキストファイル(apple_surface.txt)に書き込む

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





戻る