孤独的猫

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

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

posted on 2011-02-28 21:48  孤独的猫  阅读(183)  评论(0)    收藏  举报