分形发生器3
#include "glib.h"
double a=0.0,s,t; /*1/a为缩小率*/
int n_gene; /*数组g[][]的第一维元素的个数*/
int N=16; /*递归次数*/
double sx=220.0,sy=300.0; /*开始点坐标*/
double leng0=200.0; /*开始点与结束点的距离*/
double gene[][2]={{0.0,1.0},{-90.0,-1.0},{END}};
void fractal(double leng,int n) /*分形图形描画函数*/
{
int i;
if (n>=N)
move(leng);
else
{
turn(-180.0*t/PI);
for (i=0;i<n_gene;i++)
{
if (180.0!=gene[i][0])
if (gene[i][1]<0)
{
warp(fabs(gene[i][1])*leng/a);
turn(180.0);
fractal(fabs(gene[i][1]*leng/a),n+1);
turn(180.0);
warp(fabs(gene[i][1])*leng/a);
}
else
fractal(fabs(gene[i][1])*leng/a,n+1);
else
warp(fabs(gene[i][1])*leng/a);
}
turn(-s+180*t/PI);
}
}
void main()
{
int i=0;
double b=0.0,c=0.0;
ginit();
while (END!=gene[i][0]) /*缩小率的计算*/
{
turn(gene[i][0]);
a+=fabs(gene[i][1])*cos(RADIAN);
c+=fabs(gene[i][1])*sin(RADIAN);
if (-180!=gene[i][0])
b+=fabs(gene[i][1]);
i++;
}
n_gene=i;
s=ANGLE;
t=atan(c/a);
a/=cos(t);
/*发生器的描画*/
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][0]);
if (180.0!=gene[i][0])
move(fabs(gene[i][1])*80/a);
else
warp(fabs(gene[i][1])*80/a);
}
/*分形图形的描画*/
setcolor(15);
setlp(sx,sy);
setangle(0.0);
fractal(leng0,0);
gend();
}

浙公网安备 33010602011771号