孤独的猫

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

分形发生器1

#include "glib.h"
double a=0.0,s,t;   /*1/a为缩小率*/
int n_gene;         /*数组gene[]的元素个数*/
int N=6;            /*递归次数*/
double sx=120.0,sy=240.0;   /*开始点坐标*/
double leng0=400.0;         /*开始点与结束点的距离*/
double gene[]={0.0,90.0,-150.0,90.0,END};

void fractal(double leng,int n)
{
  int i;
  if (n>=N)
    move(leng);
  else
  {
     turn(-180*t/PI);
     for (i=0;i<n_gene;i++)
     {
       turn(gene[i]);
       if (-180.0!=gene[i])
  fractal(leng/a,n+1);
       else
  warp(leng/a);
     }
     turn(-s+180*t/PI);
  }
}

void main()
{
  int b=0,i=0;
  double c=0.0,D;
  ginit();
  while (END!=gene[i])   /*缩小率与维数的计算*/
  {
    turn(gene[i]);
    a+=cos(RADIAN);
    c+=sin(RADIAN);
    if (-180.0!=gene[i])
      b++;
    i++;
  }
  n_gene=i;
  s=ANGLE;
  t=atan(c/a);
  a/=cos(t);
  D=log10((double)b)/log10(a);  /*分形维数*/

  /*发生器的描画*/
  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]);
    if (180.0!=gene[i])
      move(80/a);
    else
      warp(80/a);
  }
  printf("\n\n\n\n\n\nD=%.4f\n",D);

  setcolor(15);
  setlp(sx,sy);
  setangle(0.0);
  fractal(leng0,0);
  gend();
}

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