孤独的猫

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

/*星形为构成元素的递归图像2*/
#include "glib.h"
int n_rot=7;     /*旋转对称次数*/
int N=4;       /*递归次数*/
double scale=0.3;   /*scale:缩小率*/
double r1=110.0;  /*一次圆的半径*/
double ang,kr,ks;

void star(double r)  /*多边形描画函数*/
{
  int i;
  turn(180.0);
  warp(r);
  turn(180.0-ang);
  for (i=0;i<n_rot;i++)
  {
    move(r*ks);
    turn(180-2*ang);
  }
  turn(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)*kr*ang);
      warp(r*(1+scale));
      recurs(r*scale,n+1);
      turn(180.0);
      warp(r*(1+scale));
      turn(-(i+k)*kr*ang);
    }
  }
  setcolor(n-1);
}

void main()
{
  ginit();
  setbkcolor(15);
  if (!(n_rot%2))
  {
    ang=180.0/n_rot;
    ks=2*cos(PI/n_rot);
    kr=2;
  }
  else
  {
    ang=90.0/n_rot;
    ks=2*cos(PI/n_rot/2);
    kr=4;
  }
  setlp(320.0,200.0);
  setangle(-90.0);
  recurs(r1,1);
  gend();
}


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