分形发生器1
#include "glib.h"
double a=0.0,s,t; /*1/a为缩小率*/
int n_gene; /*数组gene[]的元素个数*/
int N=6; /*递归次数*/
double sx=120.0,sy=240.0; /*开始点坐标*/
double leng0=400.0; /*开始点与结束点的距离*/
double gene[]={0.0,90.0,-150.0,90.0,END};
void fractal(double leng,int n)
{
int i;
if (n>=N)
move(leng);
else
{
turn(-180*t/PI);
for (i=0;i<n_gene;i++)
{
turn(gene[i]);
if (-180.0!=gene[i])
fractal(leng/a,n+1);
else
warp(leng/a);
}
turn(-s+180*t/PI);
}
}
void main()
{
int b=0,i=0;
double c=0.0,D;
ginit();
while (END!=gene[i]) /*缩小率与维数的计算*/
{
turn(gene[i]);
a+=cos(RADIAN);
c+=sin(RADIAN);
if (-180.0!=gene[i])
b++;
i++;
}
n_gene=i;
s=ANGLE;
t=atan(c/a);
a/=cos(t);
D=log10((double)b)/log10(a); /*分形维数*/
/*发生器的描画*/
setcolor(9);
rectangle(0,0,99,79);
setcolor(14);
setlp(10.0,sy/5);
setangle(0.0);
turn(-180*t/PI);
for (i=0;i<n_gene;i++)
{
turn(gene[i]);
if (180.0!=gene[i])
move(80/a);
else
warp(80/a);
}
printf("\n\n\n\n\n\nD=%.4f\n",D);
setcolor(15);
setlp(sx,sy);
setangle(0.0);
fractal(leng0,0);
gend();
}

浙公网安备 33010602011771号