孤独的猫

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

分形发生器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();
}

posted on 2011-02-28 22:08  孤独的猫  阅读(159)  评论(0)    收藏  举报