/*星形为构成元素的递归图像*/
#include "glib.h"
int n_rot=5; /*旋转对称次数*/
int N=5; /*递归次数*/
double scale=0.38; /*scale:缩小率*/
double r1=90.0; /*一次圆的半径*/
double ang,ks;
void star(double r) /*多边形描画函数*/
{
int i;
turn(180.0);
warp(r);
turn(90.0+ang);
for (i=0;i<n_rot;i++)
{
move(r*ks);
turn(-ang);
move(r*ks);
turn(2*ang);
}
turn(90-ang);
warp(r);
}
void recurs(double r,int n) /*递归图形描画函数*/
{
int i,j,k;
if (n<=N)
{
setcolor(n);
star(r);
setfillstyle(1,n);
floodfill(LPX,LPY,n);
if (1==n)
{
j=n_rot;
k=0;
}
else
{
j=n_rot-1;
k=1;
}
for (i=0;i<j;i++)
{
turn(180.0);
turn((i+k)*ang);
warp(r*(1+scale));
recurs(r*scale,n+1);
turn(180.0);
warp(r*(1+scale));
turn(-(i+k)*ang);
}
}
setcolor(n-1);
}
void main()
{
ginit();
setbkcolor(15);
ang=360/n_rot;
ks=sin(PI/n_rot);
setlp(320.0,200.0);
setangle(-90.0);
recurs(r1,1);
gend();
}

浙公网安备 33010602011771号