// [このプログラムの目的]先端が尖り、付け根がくびれた花びらのモデル 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
戻る