fractus4_01.cpp
上传用户:hzcygd
上传日期:2022-04-30
资源大小:109k
文件大小:4k
源码类别:

分形几何

开发平台:

Visual C++

  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "fractus4_01.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. #pragma resource "*.dfm"
  8. TForm1 *Form1;
  9. #include "glib.h"
  10. const int KL=100;
  11. const double BOX=0.01;
  12. int dx=224,dy=112;
  13. double x_min=-2.0,x_max=2.0,y_min=-0.2,y_max=0.2;
  14. double xc=-1.35,yc=0.0,x0=0.2,y0=0.05;
  15. double delta=0.0001;TRect rect;
  16. int colors[16]={0x00000000,0x00FF0000,0x0000FF00,0x00FF8C00,
  17.                 0x000000FF,0x00FF00FF,0x0000FFFF,0x00A0A0A0,
  18.                 0x009BFFFF,0x009BFFFF,0x00A0FF00,0x00FFFF00,
  19.                 0x006E6EFF,0x00FF9BFF,0x009BFFFF,0x00FFFFFF};
  20. //---------------------------------------------------------------------------
  21. __fastcall TForm1::TForm1(TComponent* Owner)
  22.         : TForm(Owner)
  23. {
  24. }
  25. //---------------------------------------------------------------------------
  26. //点列的动向
  27. void __fastcall TForm1::FormCreate(TObject *Sender)
  28. {
  29.   Image1->Height=0;Image1->Top=0;
  30.   Image1->Width=Screen->Width;Image1->Height=Screen->Height;
  31.   rect=Rect(0,0,Image1->Width,Image1->Height);//清屏
  32.   Image1->Canvas->CopyMode=cmBlackness;
  33.   Image1->Canvas->CopyRect(rect,Image1->Canvas,rect);
  34. }
  35. //---------------------------------------------------------------------------
  36. void __fastcall TForm1::N1Click(TObject *Sender)
  37. {
  38.   int sx,sy,i,j,k,k_max,prd,col;
  39.   double a1,b1,a2,b2;
  40.   double xx[20],yy[20],x[KL+1],y[KL+1];
  41.   Image1->Canvas->CopyRect(rect,Image1->Canvas,rect);
  42.   set0(320.0,200.0);
  43.   a1=2*(double)dx/(x_max-x_min);
  44.   b1=-(double)dx*(x_max+x_min)/(x_max-x_min);
  45.   a2=2*(double)dy/(y_max-y_min);
  46.   b2=-(double)dy*(y_max+y_min)/(y_max-y_min);
  47.   Image1->Canvas->Pen->Color=colors[7];
  48.   Image1->Canvas->Brush->Style=bsSolid;
  49.   Image1->Canvas->Brush->Color=clBlack;
  50.   for(sx=-dx;sx<=dx;sx+=dx/4)
  51.    {if(sx==-dx||sx==0||sx==dx)
  52.       Image1->Canvas->Pen->Style=psSolid;
  53.     else
  54.       Image1->Canvas->Pen->Style=psDot;
  55.     Form1->Image1->Canvas->MoveTo(sx,-dy);
  56.     Form1->Image1->Canvas->LineTo(sx,dy);
  57.    }
  58.   for(sy=-dy;sy<=dy;sy+=dy/4)
  59.    {if(sy==-dy||sy==0||sy==dy)
  60.       Image1->Canvas->Pen->Style=psSolid;
  61.     else
  62.       Image1->Canvas->Pen->Style=psDot;
  63.     Form1->Image1->Canvas->MoveTo(-dx,sy);
  64.     Form1->Image1->Canvas->LineTo(dx,sy);
  65.    }
  66.   x[0]=x0;y[0]=y0;
  67.   for(k=1;k<=KL;k++)
  68.    {x[k]=x[k-1]*x[k-1]-y[k-1]*y[k-1]+xc;
  69.     y[k]=2*x[k-1]*y[k-1]+yc;
  70.     if((x[k]*x[k]+y[k]*y[k])>=4.0)
  71.      {k_max=k;prd=0;goto BR;}
  72.    }
  73.   k_max=KL;
  74.   for(k=1;k<=13;k++)
  75.    {if(fabs(x[k_max]-x[k_max-k])<BOX
  76.      &&fabs(y[k_max]-y[k_max-k])<BOX)
  77.      {prd=k;goto BR;}
  78.    }
  79.   prd=0;
  80.   BR:for(k=0;k<=k_max;k++)
  81.    {sx=a1*x[k]+b1;
  82.     sy=a2*y[k]+b2;
  83.     col=(prd)?(1+k%prd):15;
  84.     Image1->Canvas->Pen->Color=colors[col];
  85.     Image1->Canvas->Brush->Color=colors[col];
  86.     Image1->Canvas->Ellipse(sx-2,-sy-2,sx+2,-sy+2);
  87.    }
  88.   Image1->Canvas->Pen->Color=colors[14];
  89.   Image1->Canvas->Brush->Style=bsClear;
  90.   sx=a1*x0+b1;
  91.   sy=a2*y0+b2;
  92.   Image1->Canvas->Rectangle(sx-6,-sy-6,sx+6,-sy+6);
  93.   for(k=0;k<prd;k++)
  94.    {xx[k]=x[k_max-k];
  95.     yy[k]=y[k_max-k];
  96.    }
  97.   for(i=0;i<prd-1;i++)
  98.    {double s;
  99.     for(j=i+1;j<prd;j++)
  100.       if(xx[i]<xx[j])
  101.        {s=xx[i];xx[i]=xx[j];xx[j]=s;
  102.         s=yy[i];yy[i]=yy[j];yy[j]=s;
  103.        }
  104.    }
  105. }
  106. //---------------------------------------------------------------------------
  107. void __fastcall TForm1::N2Click(TObject *Sender)
  108. {
  109.   if(SavePictureDialog1->Execute())
  110.     Image1->Picture->SaveToFile(SavePictureDialog1->FileName);
  111. }
  112. //---------------------------------------------------------------------------
  113. void __fastcall TForm1::N3Click(TObject *Sender)
  114. {
  115.   Close();        
  116. }
  117. //---------------------------------------------------------------------------