孤独的猫

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

/*星形为构成元素的递归图像*/
#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();
}


posted on 2011-03-05 12:58  孤独的猫  阅读(198)  评论(0)    收藏  举报