Понедельник, 06.05.2024, 10:24
Главная Регистрация RSS
Приветствую Вас, Гость
Меню сайта
Категории раздела
Форма входа
ДРУЗЬЯ САЙТА

Вызвать мастера в Красноярске

8 983 207 5474

8 902 918 9334

8 933 332 3164

---------------------------------

Запчасти бытткхники

  • Велес т.2935600
  • СЦ Близнецов т.2296595
  • Вираж
  • Красраб 110 т.2589503
  • Комплекстур Щорса30 т.2606797
  • Радиодетали

  • Якорный 9 т.2688317
  • Воронова 16 т.2202990
  • Красраб 125а т.2456544
  • Профи т.2702737
  • Дайте две т.+79237713323
  • Электрика

  • Электро +
  • Планета электрика
  • ЗАКЛАДКИ
    Поиск
    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Главная » Статьи » C++ Builder » Фрактал

    Фрактал мальденброта на c++ Builder 6 windows 10

    Фрактал мальденброта на c++ Builder 6 windows 10

    Четыре реализации комплексные  числа 

    Сохранение в файл JPG

    Масштаб 400000 

    Даступна любая точка для увелтчения в 400000 раз

    Палитра цвета 

    исходник здесь экзешник там же

    =

    =

    =

    =

    =

    =

    =

    =

    =

    =

    //---------------------------------------------------------------------------
    // register  double r = 0.1 + i * 0.03 * 0.2; // openGL
    // register  double g = 0.2 + i * 0.03 * 0.3; //
    // register  double b = 0.3 + i * 0.03 * 0.1; //
    //-----------------------------------------------------------------------

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
       // ::SetPriorityClass(::GetCurrentProcess(), HIGH_PRIORITY_CLASS);
      // ::SetPriorityClass(::GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
       Form1->DoubleBuffered=True;
       Panel3->DoubleBuffered=True;
       Panel6->DoubleBuffered=True;
       Panel9->DoubleBuffered=True;
       Panel12->DoubleBuffered=True;
          ls = new TStringList ;  ls->Clear();
          jp = new  TJPEGImage();
        // jp->CompressionQuality=60;

    HANDLE ProcessHandle, ThreadHandle;
    DWORD ProcessID = GetCurrentProcessId();
    ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS,false,ProcessID);
    SetPriorityClass(ProcessHandle,REALTIME_PRIORITY_CLASS);
    ThreadHandle = GetCurrentThread();
    SetThreadPriority(ThreadHandle,THREAD_PRIORITY_TIME_CRITICAL);

      pX=Image1->Width/2 ;
      pY=Image1->Height /2;

      LabeledEdit1->Tag=  200;
      LabeledEdit2->Tag= 100;
      LabeledEdit3->Tag= 1;

      ProgressBar1->Max=Image1->Height ;
      ProgressBar2->Max=Image2->Width ;
      ProgressBar3->Max=Image3->Width ;
      ProgressBar4->Max=Image4->Height ;
      f=true;
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::FormDestroy(TObject *Sender)
    {
       delete jp;
       delete ls;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::SavePicture(AnsiString FNamet ,TImage *Imagem)
    {
         Imagem->Canvas->Pen->Color=clBlack;
         Imagem->Canvas->MoveTo(1,1);
         Imagem->Canvas->LineTo(Imagem->Width-1,1);
         Imagem->Canvas->LineTo(Imagem->Width-1,Imagem->Height-1 );
         Imagem->Canvas->LineTo(1,Imagem->Height-1 );
         Imagem->Canvas->LineTo(1,1 );

         Imagem->Canvas->Font->Color=clWhite;   //clBlack;//  clGreen;
         Imagem->Canvas->Font->Size =  12 ;
         Imagem->Canvas->Font->Style = Imagem->Canvas->Font->Style << fsBold;
         HDC hdc = Imagem->Canvas->Handle;
         SetBkMode(hdc, TRANSPARENT);
         Imagem->Canvas->TextOutA(10 ,10 ,FNamet );
         Imagem->Canvas->TextOutA(10 ,30 ,"dokakodm.ucoz.ru" );

        Imagem->Canvas->Font->Style = Imagem->Canvas->Font->Style >> fsBold;
        Imagem->Canvas->Font->Size = 8;
        Imagem->Canvas->Font->Color=clBlack;

         AnsiString FNames=FNamet;

         SavePictureDialog1->FileName=FNames;

    if(SavePictureDialog1->Execute()){

        FNames= SavePictureDialog1->FileName;
       jp->Assign( Imagem->Picture->Bitmap ) ;
       jp->SaveToFile(FNames) ;
       }

    }
    //--------------------------------------------------------------------------
    void __fastcall TForm1::DrawMandelbrot11(int smx,int smy,int scale,TImage *Imagem)
    {
            double XS = Image1->Width;
            double YS = Image1->Height;
            double v;   register int i;
            int r ;
            int g ;
            int b ;

            std::complex<double> z(0.0,0.0);
            std::complex<double> s(0.0,0.0);

      for (register  int y = 0; y < YS; y++){
          for (register int x = 0; x < XS; x++)
          {

             z._M_re=0 ;  z._M_im=0;

             i = 0;
             v=0.0;

              while (i < 500  && v <16 ){

              s._M_re= (x - XS/2.0-smx) / scale ;
              s._M_im= (y - YS/2.0-smy) / scale ;

                  z = z * z +s  ;
                  i++;
            //  v=  sqrtl(z._M_re * z._M_re + z._M_im * z._M_im) ;
            //  v = z._M_re * z._M_re + z._M_im * z._M_im ;
               v=abs(z);
              }

             r =  Form2->OutR ( i);
             g =  Form2->OutG ( i);
             b =  Form2->OutB ( i);
            
               if(i >= 500){ Imagem->Canvas->Pixels[ x ][ y ] = ColorDialog1->Color; }//???? ?????????
               else  Imagem->Canvas->Pixels[x][y] = RGB(r, g, b);
          }
        ProgressBar1->Position=y;
        }
       Label9->Caption="STL";
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::DrawMandelbrot1(int smx,int smy,int scale,TImage *Imagem)
    {
            int XS = Imagem->Width;
            int YS = Imagem->Height;

      for (register  int y = 0; y < YS; y++){
          for (register int x = 0; x < XS; x++)
          {
              Complex z(0, 0);
             register int i = 0;
              while (i < 500 && z.abs() < 16){
                  z = z * z + Complex((x - XS/2-smx) / (double)scale, (y - YS/2-smy) / (double)scale);
                  i++;
              }
            int r =  Form2->OutR ( i);
            int g =  Form2->OutG ( i);
            int b =  Form2->OutB ( i);

               if(i >= 500){ Imagem->Canvas->Pixels[ x ][ y ] = ColorDialog1->Color; } //ColorBox1->Selected;}//цвет множества
               else  Imagem->Canvas->Pixels[x][y] = RGB(r, g, b);
          }
         ProgressBar1->Position=y;
        }
       Label9->Caption="Svoi";
     }
    //--------------ПРОИЗВОЛЬНЫЙ МАСШТАБ ДО 600---------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       Image1->Picture->Bitmap->Width= Image1->Width;
       Image1->Picture->Bitmap->Height= Image1->Height;
       Image1->Canvas->FillRect(Rect (0,0,Image1->Width, Image1->Height));
       int scale= TrackBar1->Position;
       Label1->Caption=scale;
       LabeledEdit1->Text= scale;
       LabeledEdit1->Tag=  scale;
       LabeledEdit2->Text=100;
       LabeledEdit2->Tag= 100;
       LabeledEdit3->Text= 1;
       LabeledEdit3->Tag= 1;
      if(f)DrawMandelbrot11(100,1,scale,Image1);
      else  DrawMandelbrot1(100,1,scale,Image1);
    }
    //----------------ФИКСИРОВАНЫЙ МАСШТАБ 2000-----------------------------------------------------------
    void __fastcall TForm1::Button10Click(TObject *Sender)
    {
       Image1->Picture->Bitmap->Width= Image1->Width;
       Image1->Picture->Bitmap->Height= Image1->Height;
       Image1->Canvas->FillRect(Rect (0,0,Image1->Width, Image1->Height));
       int scale= 2000;
       //Label1->Caption=scale;
       LabeledEdit1->Text= scale;
       LabeledEdit1->Tag=  scale;
       LabeledEdit2->Text=200;
       LabeledEdit2->Tag= 200;
       LabeledEdit3->Text= 1500;
       LabeledEdit3->Tag= 1500;
        if(f) DrawMandelbrot11(200,1500,scale,Image1);
      else  DrawMandelbrot1(200,1500,scale,Image1);
    }
    //-------------------ФИКСИРОВАНЫЙ МАСШТАБ 5000-----------3000,500,2500---------------------------------------------
    void __fastcall TForm1::Button11Click(TObject *Sender)
    {
       Image1->Picture->Bitmap->Width= Image1->Width;
       Image1->Picture->Bitmap->Height= Image1->Height;
       Image1->Canvas->FillRect(Rect (0,0,Image1->Width, Image1->Height));
       int scale=5000;
       //Label1->Caption=scale;
       LabeledEdit1->Text= scale;
       LabeledEdit1->Tag=  scale;
       LabeledEdit2->Text=700;
       LabeledEdit2->Tag=  700;
       LabeledEdit3->Text= 4500;
       LabeledEdit3->Tag=  4500;
        if(f) DrawMandelbrot11(700,4500,scale,Image1);
      else  DrawMandelbrot1(700,4500,scale,Image1);

    }
    //-------------------ФИКСИРОВАНЫЙ МАСШТАБ 30000-----------------------------------------------------------
    void __fastcall TForm1::Button12Click(TObject *Sender)
    {
       Image1->Picture->Bitmap->Width= Image1->Width;
       Image1->Picture->Bitmap->Height= Image1->Height;
       Image1->Canvas->FillRect(Rect (0,0,Image1->Width, Image1->Height));
       int scale=30000;
      // Label1->Caption=scale;
       LabeledEdit1->Text= scale;
       LabeledEdit1->Tag= scale;
       LabeledEdit2->Text=13800;
       LabeledEdit2->Tag=13800;
       LabeledEdit3->Text= 16700;
       LabeledEdit3->Tag=16700;
        if(f) DrawMandelbrot11(13800,16700,scale,Image1);
      else  DrawMandelbrot1(13800,16700,scale,Image1);

    }
    //--------МАСШТАБ СО СМЕЩЕНИЕМ ПРОИЗВОЛЬНЫЙ---------------------------------------------------------------
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
       Image1->Picture->Bitmap->Width= Image1->Width;
       Image1->Picture->Bitmap->Height= Image1->Height;
       Image1->Canvas->FillRect(Rect (0,0,Image1->Width, Image1->Height));
       int scale=StrToIntDef(LabeledEdit1->Text,200) ;
       LabeledEdit1->Tag= scale;
       //Label1->Caption=scale;
       int sx=StrToIntDef( LabeledEdit2->Text,100);
       LabeledEdit2->Tag=sx;
       int sy=StrToIntDef( LabeledEdit3->Text,1);
       LabeledEdit3->Tag=sy;
       Button5->Enabled=false;
        if(f)DrawMandelbrot11(sx,sy,scale,Image1);
      else  DrawMandelbrot1(sx,sy,scale,Image1);
       
    }
    //--------------СОХРАНИТЬ-------------------------------------------------------------
    void __fastcall TForm1::N2Click(TObject *Sender)
    {
       if(PageControl1->ActivePageIndex ==0) {
       AnsiString FNamet="Фрактал множество Мальденброта 1.jpg";
       SavePicture(FNamet ,Image1); }
       if(PageControl1->ActivePageIndex ==1) {
       AnsiString FNamet="Фрактал множество Мальденброта 2.jpg";
       SavePicture(FNamet ,Image2); }
        if(PageControl1->ActivePageIndex ==2) {
       AnsiString FNamet="Фрактал множество Мальденброта 3.jpg";
       SavePicture(FNamet ,Image3); }
        if(PageControl1->ActivePageIndex ==3) {
       AnsiString FNamet="Фрактал множество Мальденброта 4.jpg";
       SavePicture(FNamet ,Image4); }
    }
    //--------------СЩХРАНИТЬ ПАРАМЕТРЫ ЦВЕТА В ПАПКУ С ПРГРАММОЙ----------------------------------------------------------------------
    void __fastcall TForm1::N3Click(TObject *Sender)
    {
       AnsiString FileNames;
       if(PageControl1->ActivePageIndex ==0) { FileNames="parameters_mandel_1.txt";}
       if(PageControl1->ActivePageIndex ==1) { FileNames="parameters_mandel_2.txt";}
       SaveDialog1->FileName=FileNames;
       if( SaveDialog1->Execute() )
       {
        FileNames= SaveDialog1->FileName;
        ls->Clear();
       ls->Add( IntToStr(Form2->r) );
       ls->Add( IntToStr(Form2->kr) );
       ls->Add( IntToStr(Form2->g) );
       ls->Add( IntToStr(Form2->kg) );
       ls->Add( IntToStr(Form2->b) );
       ls->Add( IntToStr(Form2->kb) );
       ls->Add( IntToStr(Form2->y) );

      if(PageControl1->ActivePageIndex ==0) {
       ls->Add( IntToStr(ColorDialog1->Color) );
       ls->Add( LabeledEdit1->Text );
       ls->Add( LabeledEdit2->Text );
       ls->Add( LabeledEdit3->Text );
                         }
       if(PageControl1->ActivePageIndex ==1) {
       ls->Add( IntToStr(ColorBox2->Selected) );
       ls->Add( LabeledEdit4->Text );
       ls->Add( LabeledEdit5->Text );
       ls->Add( LabeledEdit6->Text );
                         }
        ls->SaveToFile(FileNames );
       }
    }
    //-----------ОТКРЫТЬ ФАЙЛ С ПАРАМЕТРАМИ--------------------------------------------------------------
    void __fastcall TForm1::N4Click(TObject *Sender)
    {
         AnsiString FileNames ;
       if(PageControl1->ActivePageIndex ==0) { FileNames="parameters_mandel_1.txt";}
       if(PageControl1->ActivePageIndex ==1) { FileNames="parameters_mandel_2.txt";}
       OpenDialog1->FileName=FileNames;
       try{
       if( OpenDialog1->Execute() )
       {
        ls->Clear();
        FileNames= OpenDialog1->FileName;
        ls->LoadFromFile(FileNames);

       int r = StrToIntDef( ls->Strings[0],20 );
       int kr = StrToIntDef( ls->Strings[1],10 );
       int g = StrToIntDef( ls->Strings[2],30 );
       int kg = StrToIntDef( ls->Strings[3],20 );
       int b = StrToIntDef( ls->Strings[4],10 );
       int kb = StrToIntDef( ls->Strings[5],30 );
       int y = StrToIntDef( ls->Strings[6],3 );
      Form2->color_default ( r,g,b,y,kr,kg,kb);
      Form2->Button1Click(Sender);

      if(PageControl1->ActivePageIndex ==0) {
      ColorDialog1->Color  = StrToIntDef( ls->Strings[7],255 );
      BitBtn1->Font->Color= ColorDialog1->Color ;
      LabeledEdit1->Text= StrToIntDef( ls->Strings[8],100 );
      LabeledEdit2->Text= StrToIntDef( ls->Strings[9],100 );
      LabeledEdit3->Text= StrToIntDef( ls->Strings[10],1 );
                                            }
      if(PageControl1->ActivePageIndex ==1) {
      ColorBox2->Selected  = StrToIntDef( ls->Strings[7],255 );
      LabeledEdit4->Text= StrToIntDef( ls->Strings[8],100 );
      LabeledEdit5->Text= StrToIntDef( ls->Strings[9],100 );
      LabeledEdit6->Text= StrToIntDef( ls->Strings[10],1 );
                                            }

      }
      }
      catch (...)
      {
        ShowMessage("Ошибка при открытии файла, файл не найден или поврежден");
      }
    }
    //---------------ИЗМЕНИТЬ МАСШТАБ 600------------------------------------------------------------
    void __fastcall TForm1::TrackBar1Change(TObject *Sender)
    {
       int scale= TrackBar1->Position;
       Label1->Caption=scale;
    }

    //--------------ЦВЕТ ПО УМОЛЧАНИЮ-------------------------------------------------------------
    void __fastcall TForm1::Button18Click(TObject *Sender)
    {
      Form2->color_default ( 20,30,10,3,10,20,30 );
      Form2->Button1Click(Sender);
       Button1Click(Sender);
    }
    //--------------ЦВЕТ МНОЖЕСТВА-------------------------------------------------------------
    void __fastcall TForm1::BitBtn1Click(TObject *Sender)
    {
       if( ColorDialog1->Execute()){
       BitBtn1->Font->Color= ColorDialog1->Color;
    }
    }
    //---------------------------------------------------------------------------
     void __fastcall TForm1::DrawMandelbrot2(int smx,int smy, double scale,TImage *Imagem)
    {
      const int max = 10;
      int XS = Imagem->Width;    
      int YS = Imagem->Height;

    for ( register  int ix = 0; ix < XS-1; ix++ )
    {
      for ( register  int iy = 0; iy < YS-1; iy++ )
      {
       double x = 0.0;
       double y = 0.0;
       double  cx= (ix - XS/2-smx)/scale;
       double  cy= (iy - YS/2-smy)/scale;

       register int i = 1;
        while (i <  255)
        {
         double x1 = x * x - y * y + cx;
         double y1 = 2 * x * y + cy;
          if ( fabs(x) > max || fabs(y) > max) break;
          x = x1;
          y = y1;
          i = i + 1;
        }
         
        if( i >= 255 ){Imagem->Canvas->Pixels[ ix ][ iy ] = ColorBox2->Selected; }//цвет множиства
       else {
            int r =Form2->OutR ( i);
            int g =Form2->OutG ( i);
            int b =Form2->OutB ( i);
            Imagem->Canvas->Pixels[ ix ][ iy ]=RGB(r,g,b);
            }
       }
       ProgressBar2->Position=ix;
     }
    }
    //-----------------МАСШТАБ ПЛАВНО 50-600--------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
       Image2->Picture->Bitmap->Width= Image2->Width;
       Image2->Picture->Bitmap->Height= Image2->Height;
       Image2->Canvas->FillRect(Rect (0,0,Image2->Width, Image2->Height));
       double scale= (double)(TrackBar2->Position);
       Label2->Caption=scale;
       LabeledEdit4->Text= scale;
       LabeledEdit5->Text=100;
       LabeledEdit6->Text= 1;
       DrawMandelbrot2(100,1,scale ,Image2);
    }
    //------------------МАСШТАБ ФИКСИРОВАННЫЙ 2500---------------------------------------------------------
    void __fastcall TForm1::Button13Click(TObject *Sender)
    {
       Image2->Picture->Bitmap->Width= Image2->Width;
       Image2->Picture->Bitmap->Height= Image2->Height;
       Image2->Canvas->FillRect(Rect (0,0,Image2->Width, Image2->Height));
       double scale= 2500.;
      // Label2->Caption=scale;
       LabeledEdit4->Text= scale;
       LabeledEdit5->Text=300;
       LabeledEdit6->Text= 2300;
       DrawMandelbrot2(300,2300,scale ,Image2);
    }
    //---------------МАСШТАБ ФИКСИРОВАННЫЙ 5000------------------------------------------------------------
    void __fastcall TForm1::Button14Click(TObject *Sender)
    {
       Image2->Picture->Bitmap->Width= Image2->Width;
       Image2->Picture->Bitmap->Height= Image2->Height;
       Image2->Canvas->FillRect(Rect (0,0,Image2->Width, Image2->Height));
       double scale= 5000.;
      // Label2->Caption=scale;
       LabeledEdit4->Text= scale;
       LabeledEdit5->Text=1500;
       LabeledEdit6->Text= 3500;
       DrawMandelbrot2(1500,3500,scale ,Image2);
    }
    //--------------МАСШТАБ ФИКСИРОВАННЫЙ 30000-------------------------------------------------------------
    void __fastcall TForm1::Button15Click(TObject *Sender)
    {
       Image2->Picture->Bitmap->Width= Image2->Width;
       Image2->Picture->Bitmap->Height= Image2->Height;
       Image2->Canvas->FillRect(Rect (0,0,Image2->Width, Image2->Height));
       double scale= 30000.;
     //  Label2->Caption=scale;
       LabeledEdit4->Text= scale;
       LabeledEdit5->Text=13800;
       LabeledEdit6->Text= 16700;
     //  DrawMandelbrot2(2500,8000,scale ,Image2); //10000
      DrawMandelbrot2(13800,16700,scale ,Image2);
    }
    //------------ПРИМЕНИТЬ МАСШТАБ ЛЮБОЙ И СМЕЩЕНИЕ---------------------------------------------------------------
    void __fastcall TForm1::Button6Click(TObject *Sender)
    {
       Image2->Picture->Bitmap->Width= Image2->Width;
       Image2->Picture->Bitmap->Height= Image2->Height;
       Image2->Canvas->FillRect(Rect (0,0,Image2->Width, Image2->Height));
       double scale=LabeledEdit4->Text.ToDouble() ;
     //  Label2->Caption=scale;
       int sx=StrToIntDef( LabeledEdit5->Text,100);
       int sy=StrToIntDef( LabeledEdit6->Text,1);
       DrawMandelbrot2(sx,sy,scale,Image2);

    }
    //------------МАСШТАБ ПЛАВНО 50-600--------------------------------------------------------------

    void __fastcall TForm1::TrackBar2Change(TObject *Sender)
    {
       double scale= (double)(TrackBar2->Position);
       Label2->Caption=scale;
    }
    //-------------ЦВЕТ ПО УМОЛЧАНИЮ--------------------------------------------------------------
    void __fastcall TForm1::Button20Click(TObject *Sender)
    {
       Form2->color_default ( 10,30,20,3,20,10,30 );
       Form2->Button1Click(Sender);
       Button2Click(Sender);
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::DrawMandelbrot3(int smx,int smy, double scale,TImage *Imagem)
    {
    int x, y, n, i, L = 10;
    double tgx, tgy, rX1, rY1;
    double  x1, x2,y1,y2;
    double xx, zm, zr, zi;
       n = 300;
      x1 = -2.4;
      x2 = 0.8;
      y1 = -1.2;
      y2 = 1.2;

       if ( x1 < 0 ) if ( x2 > 0 ) tgx = abs( x1 ) + abs( x2 );
    if (x1<0) if (x2<0) tgx=abs(x1)-abs(x2);
    if (x1>0) if (x2>0) tgx=x2-x1;
       if ( y1 < 0 ) if ( y2 > 0 ) tgy = abs( y1 ) + abs( y2 );
    if (y1<0) if (y2<0) tgy=abs(y1)-abs(y2);
    if (y1>0) if (y2>0) tgy=y2-y1;

     for( x = 0; x < Imagem->Width; x++ )
       {
        rX1 = x1 + (tgx / (Imagem->Width / 2) )* (x-smx);
        
        for( y = 0; y < Imagem->Height; y++ )
            {
              rY1 = y1 + ( tgy / ( Imagem->Height /1.2) )* (y-smy);

              zr = 0;
              zi = 0;
              zm = 0;

              for( i = 0; i < n; i++ )
                {
                  xx = zr;
                  zr = xx * xx - zi * zi + rX1 / scale;
                  zi = 2 * xx * zi + rY1 / scale;
                  zm = zr * zr + zi * zi;
                  if ( zm > L ) break;
                }
              if ( zm < L )
                       {
                       Imagem->Canvas->Pixels[x][y] = ColorBox3->Selected; //цвет множиства
                       }
              else {
            int r =Form2->OutR ( i);
            int g =Form2->OutG ( i);
            int b =Form2->OutB ( i);
              Imagem->Canvas->Pixels[x][y] = RGB(r, g, b);
                   }
            }
          ProgressBar3->Position=x;
         }
    }
    //-----------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
       Image3->Picture->Bitmap->Width= Image3->Width;
       Image3->Picture->Bitmap->Height= Image3->Height;
       Image3->Canvas->FillRect(Rect (0,0,Image3->Width, Image3->Height));
       double scale= (double)TrackBar3->Position/10;
       Label3->Caption=scale;
       DrawMandelbrot3(10,10, scale,Image3);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button16Click(TObject *Sender)
    {
      Image3->Picture->Bitmap->Width= Image3->Width;
       Image3->Picture->Bitmap->Height= Image3->Height;
       Image3->Canvas->FillRect(Rect (0,0,Image3->Width, Image3->Height));
       double scale= 7.0;
      // Label3->Caption=scale;
       DrawMandelbrot3(300,1300, scale,Image3);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::TrackBar3Change(TObject *Sender)
    {
       double scale= (double)TrackBar3->Position/10;
       Label3->Caption=scale;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button22Click(TObject *Sender)
    {
       Form2->color_default ( 10,30,20,4,20,10,30 );
       Form2->Button1Click(Sender);
       Button3Click(Sender);
    }
    //---------------------------------------------------------------------------
    double __fastcall TForm1::MandelSetPoten (double cx, double cy, int maxiter)
    {
          register    double x, y, x2, y2, temp, potential;
          register    int iter;
     
        x = cx;
        x2 = x * x;
        y = cy;
        y2 = y * y;
        iter = 0;
     
        do {
            temp = x2 - y2 + cx;
            y = 2.0*x*y + cy;
            x = temp;
            x2 = x * x;
            y2 = y * y;
            iter++;
        } while ((iter < maxiter) && ((x2+y2) < 10000.0));
        if (iter < maxiter)
            potential = 0.5*log(x2+y2) / powl(2.0, iter);
        else
            potential = 0.0;
     
        return potential;
    }
    //--------------------------------------------------------------------------
    void __fastcall TForm1::DrawMandelbrot4 (double scale,TImage *Imagem)
    {
          std::complex<double> c;  c.real();   int k=1;
          register     int nx, ny, iy, ix, ipen, maxiter = 16000, iflag = 0, iset = 1;
          register     double xmin = -2.25, ymin = -1.25, xmax = 0.75, ymax = 1.25;
          register     double cx, cy, potent;
          register     double diff =0.6482801 , test1, test2;  //0.6482801    0.16482801

        if ((maxiter >= 16000) || (maxiter <= 0))
            maxiter = 16000;
        nx = Imagem->Width;
        ny = Imagem->Height;
        ymin = -1.125;
        ymax = 1.125;
        for (iy = 0; iy <= ny - 1; iy++) {
            cy =( ymin + iy*(ymax-ymin)/(ny+50))/scale;

            for (ix = 0; ix <= nx - 1; ix++) {
                cx =( xmin + ix*(xmax-xmin)/(nx-50))/scale;
                     c._M_re=cx;//
                    c._M_im=cy;//
                                    test1 = 2.0;
                if ((cx >= -7.55e-1) && (cx <= 4.0e-1)) {
                    if ((cy >= -6.6e-1) && (cy <= 6.6e-1))
                        test1 = abs(1.0 - sqrt(1.0-4.0*c));
                }
                test2 = 2.0;
                if ((cx >= -1.275e0) && (cx <= -7.45e-1)) {
                    if ((cy >= -2.55e-1) && (cy <= 2.55e-1))
                        test2 = abs(4.0*(c+1.0));
                }
                if (test1 <= 1.0) {
                    potent = 0;
                    iflag = 1;
                    if (iset != 0)
                               ipen = 126*k;
                    else
                               ipen =64*k; //64;
                }
                else if (test2 <= 1.0) {
                    potent = 0;
                    iflag = 1;
                    if (iset != 0)
                              ipen = 104*k;  // 338;//
                    else
                              ipen = 74*k;//64;
                }
                else {
                    potent = MandelSetPoten(cx, cy, maxiter);
                    iflag = 0;
                }
                if ((potent == 0.0) && (iflag == 0))
                           ipen = 84*k;//64;
                     else if ((potent != 0) && (iflag == 0))
                          ipen = (int)(33.0 + 15.0*(potent-33.0)/diff)*k;

                          int r =Form2->OutR ( ipen);
                          int g =Form2->OutG ( ipen);
                          int b =Form2->OutB ( ipen);
                          Imagem->Canvas->Pixels[ix][iy] = RGB(r, g, b);

                       // Imagem->Canvas->Pixels[ix][iy]= RGB(ipen*5,ipen*9,ipen*11);
                       // Imagem->Canvas->Pixels[ix][iy]=RGB(70-ipen ,120-ipen ,90-ipen );
                       // Imagem->Canvas->Pixels[ix][iy]= ipen*k;
            }
              ProgressBar4->Position=iy;      
        }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
           Image4->Picture->Bitmap->Width= Image4->Width;
           Image4->Picture->Bitmap->Height= Image4->Height;
           Image4->Canvas->FillRect(Rect (0,0,Image4->Width, Image4->Height));
           double scale= (double)TrackBar4->Position/10;
           Label4->Caption=scale;
           DrawMandelbrot4 (scale,Image4);
    }

    //---------------------------------------------------------------------------
    void __fastcall TForm1::TrackBar4Change(TObject *Sender)
    {
      double scale= (double)TrackBar4->Position/10;
      Label4->Caption=scale;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button24Click(TObject *Sender)
    {
         Form2->color_default ( 4,4,4,9,10,10,10 );
         Form2->Button1Click(Sender);
         Button4Click(Sender);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::N5Click(TObject *Sender)
    {
      Form2->BringToFront();
       Form2->Button1Click(Sender);
       Form2->Visible=true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::MainMenu1Change(TObject *Sender, TMenuItem *Source,
          bool Rebuild)
    {
        if(PageControl1->ActivePageIndex ==2 || PageControl1->ActivePageIndex ==3 || PageControl1->ActivePageIndex ==4){
         N3->Enabled = false;
          N4->Enabled = false;
        }
        else {
          N3->Enabled = true;
          N4->Enabled = true;
        }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Image1DblClick(TObject *Sender)
    {
     int m;
     if(  StrToInt( LabeledEdit1->Text )>= LabeledEdit1->Tag )
     {
       m=  StrToInt( LabeledEdit1->Text )/LabeledEdit1->Tag ;
      LabeledEdit2->Text=(Image1->Width/2 -  pX + LabeledEdit2->Tag)*m ;
      LabeledEdit3->Text=(Image1->Height/2 - pY + LabeledEdit3->Tag)*m;
      }
      if(  StrToInt( LabeledEdit1->Text )< LabeledEdit1->Tag )
     {
       m=  LabeledEdit1->Tag/StrToInt( LabeledEdit1->Text ) ;
      LabeledEdit2->Text=(Image1->Width/2 -  pX + LabeledEdit2->Tag)/m ;
      LabeledEdit3->Text=(Image1->Height/2 - pY + LabeledEdit3->Tag)/m;
      }
      Button5->Enabled=true;
    }
    //---------------------------------------------------------------------------


    void __fastcall TForm1::Image1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
      if (Button == mbLeft)
      {
      pX=X ;
      pY=Y;
      }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::LabeledEdit1Click(TObject *Sender)
    {
        Button5->Enabled=false;     
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::N8Click(TObject *Sender)
    {
       Form1->Close();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::N9Click(TObject *Sender)
    {
       f=false;     
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ComplexclassSTL1Click(TObject *Sender)
    {
      f=true;      
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::N21Click(TObject *Sender)
    {
        LabeledEdit4->Text = LabeledEdit1->Text;
        LabeledEdit5->Text = LabeledEdit2->Text;
        LabeledEdit6->Text = LabeledEdit3->Text;
    }
    //---------------------------------------------------------------------------

    =

    =

    //---------------------------------------------------------------------------

    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include "Unit2.h"
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ComCtrls.hpp>
    #include <ExtCtrls.hpp>
    #include <Dialogs.hpp>
    #include <ExtDlgs.hpp>
    #include <jpeg.hpp>
    #include <math.h>
    #include <Math.hpp>
    #include <stdio.h>
    #include <complex.h>

    #include <Buttons.hpp>
    #include <Menus.hpp>

    //---------------------------------------------------------------------------
    class Complex //
    {
    private:
        double r, i;
    public:
        Complex(double r, double i)
            { this->r = r; this->i = i; }
        Complex operator+(const Complex &c)
            { return Complex(r + c.r, i + c.i); }
        Complex operator*(const Complex &c)
            { return Complex(r * c.r - i * c.i, 2 * r * c.i); }
        double abs(){return r * r + i * i;}
    };
    //----------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:    // IDE-managed Components
            TPageControl *PageControl1;
            TTabSheet *TabSheet1;
            TTabSheet *TabSheet2;
            TTabSheet *TabSheet3;
            TTabSheet *TabSheet4;
            TTabSheet *TabSheet5;
            TPanel *Panel1;
            TPanel *Panel2;
            TPanel *Panel3;
            TButton *Button1;
            TImage *Image1;
            TPanel *Panel4;
            TPanel *Panel5;
            TButton *Button2;
            TPanel *Panel6;
            TImage *Image2;
            TPanel *Panel7;
            TPanel *Panel8;
            TButton *Button3;
            TPanel *Panel9;
            TImage *Image3;
            TPanel *Panel10;
            TPanel *Panel11;
            TButton *Button4;
            TPanel *Panel12;
            TImage *Image4;
            TPanel *Panel13;
            TPanel *Panel14;
            TPanel *Panel15;
            TSavePictureDialog *SavePictureDialog1;
            TLabel *Label1;
            TTrackBar *TrackBar1;
            TTrackBar *TrackBar2;
            TLabel *Label2;
            TLabel *Label3;
            TTrackBar *TrackBar3;
            TTrackBar *TrackBar4;
            TLabel *Label4;
            TLabel *Label7;
            TLabel *Label5;
            TLabel *Label6;
            TLabel *Label8;
            TMemo *Memo1;
            TButton *Button10;
            TButton *Button11;
            TButton *Button12;
            TButton *Button13;
            TButton *Button14;
            TButton *Button15;
            TButton *Button16;
            TButton *Button18;
            TButton *Button20;
            TButton *Button22;
            TColorBox *ColorBox2;
            TColorBox *ColorBox3;
            TButton *Button24;
            TColorDialog *ColorDialog1;
            TBitBtn *BitBtn1;
            TSaveDialog *SaveDialog1;
            TOpenDialog *OpenDialog1;
            TMainMenu *MainMenu1;
            TMenuItem *File1;
            TMenuItem *N1;
            TMenuItem *N2;
            TMenuItem *N3;
            TMenuItem *N4;
            TMenuItem *N5;
            TLabeledEdit *LabeledEdit1;
            TLabeledEdit *LabeledEdit2;
            TLabeledEdit *LabeledEdit3;
            TButton *Button5;
            TLabeledEdit *LabeledEdit4;
            TLabeledEdit *LabeledEdit5;
            TLabeledEdit *LabeledEdit6;
            TButton *Button6;
            TMenuItem *N6;
            TMenuItem *N8;
            TProgressBar *ProgressBar1;
            TProgressBar *ProgressBar2;
            TMenuItem *N7;
            TMenuItem *N9;
            TMenuItem *ComplexclassSTL1;
            TMenuItem *N10;
            TLabel *Label9;
            TProgressBar *ProgressBar3;
            TProgressBar *ProgressBar4;
            TMenuItem *N21;
            void __fastcall Button1Click(TObject *Sender);
            void __fastcall Button2Click(TObject *Sender);
            void __fastcall Button3Click(TObject *Sender);
            void __fastcall Button4Click(TObject *Sender);
            void __fastcall FormDestroy(TObject *Sender);
            void __fastcall TrackBar1Change(TObject *Sender);
            void __fastcall TrackBar2Change(TObject *Sender);
            void __fastcall TrackBar3Change(TObject *Sender);
            void __fastcall TrackBar4Change(TObject *Sender);
            void __fastcall Button10Click(TObject *Sender);
            void __fastcall Button11Click(TObject *Sender);
            void __fastcall Button12Click(TObject *Sender);
            void __fastcall Button13Click(TObject *Sender);
            void __fastcall Button15Click(TObject *Sender);
            void __fastcall Button14Click(TObject *Sender);
            void __fastcall Button16Click(TObject *Sender);
            void __fastcall Button18Click(TObject *Sender);
            void __fastcall Button20Click(TObject *Sender);
            void __fastcall Button22Click(TObject *Sender);
            void __fastcall Button24Click(TObject *Sender);
            void __fastcall BitBtn1Click(TObject *Sender);
            void __fastcall N5Click(TObject *Sender);
            void __fastcall N2Click(TObject *Sender);
            void __fastcall N3Click(TObject *Sender);
            void __fastcall N4Click(TObject *Sender);
            void __fastcall Button5Click(TObject *Sender);
            void __fastcall Button6Click(TObject *Sender);
            void __fastcall MainMenu1Change(TObject *Sender, TMenuItem *Source,
              bool Rebuild);
            void __fastcall Image1DblClick(TObject *Sender);
            void __fastcall Image1MouseDown(TObject *Sender,
              TMouseButton Button, TShiftState Shift, int X, int Y);
            void __fastcall LabeledEdit1Click(TObject *Sender);
            void __fastcall N8Click(TObject *Sender);
            void __fastcall N9Click(TObject *Sender);
            void __fastcall ComplexclassSTL1Click(TObject *Sender);
            void __fastcall N21Click(TObject *Sender);
    private:    // User declarations
    public:        // User declarations
           void __fastcall DrawMandelbrot11(int smx,int smy, int scale,TImage *Imagem);
           void __fastcall DrawMandelbrot1(int smx,int smy, int scale,TImage *Imagem);
           void __fastcall DrawMandelbrot2(int smx,int smy, double scale,TImage *Imagem);
           void __fastcall DrawMandelbrot3(int smx,int smy, double scale,TImage *Imagem);
           void __fastcall DrawMandelbrot4( double scale,TImage *Imagem);
         double __fastcall MandelSetPoten ( double cx, double cy, int maxiter);

         void __fastcall SavePicture(AnsiString FNamet ,TImage *Imagem);
           int pX,pY; bool f;
           TJPEGImage *jp ;
           TStringList *ls;

            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif

     

    =

    Категория: Фрактал | Добавил: doka (29.08.2020)
    Просмотров: 682 | Рейтинг: 0.0/0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]