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

浙公网安备 33010602011771号