Четверг, 09.05.2024, 23:38
Главная Регистрация 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 » Фрактал

    Фрактал дерево пифагора

    Фрактал дерево пифагора 

    Фрактал дерево пифагора обдуваемое ветром

    Фрактал дерево пифагора два варианта, анимация

    Исходник и исполняемый файл здесь

    С++ Builder 6 

    Компиляция и сборка под Windows 10

    =

    =

    =

    =

    =

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

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
       Form1->DoubleBuffered=True;
       Pi=3.141592;
       M=0.7;
       r=1;
       q=1;
       n=10;

    }
    //---------------------------------------------------------------------------
    //
    //           ЛИНИИ ФРАКТАЛ ДЕРЕВО ПИФАГОРА
    //
    //------------------------------------------------------------------------------
     void __fastcall TForm1::RLine(double A,double B,double A1,double B1)
     {
          Image1->Canvas->MoveTo(ceil(A),ceil(B) ) ;
          Image1->Canvas->LineTo(ceil(A1),ceil(B1));
     }
    //---------------------------------------------
    void __fastcall TForm1::Draw(double A,double B,double C,double Angl)
    {

      double Ang1 = DegToRad(Angl);
      double EA = A + C * cos(Ang1);
      double EB = B + C * sin(Ang1);

      double Ang2 = Pi / 4;
     
      double Ang3 = Ang1 - Ang2;
      double EA1 = EA + C * cos(Ang3);
      double EB1 = EB + C * sin(Ang3);
     
      double Ang4 = Ang1 + Ang2;
      double EA2 = EA + C * cos(Ang4);
      double EB2 = EB + C * sin(Ang4);
     
      RLine(A, B, EA, EB);
      RLine(EA, EB, EA1, EB1);
      RLine(EA, EB, EA2, EB2);
     
      if (C > 1 )  {

        C = C * M;  //0.7
        Draw(EA1, EB1, C, RadToDeg(Ang3));
        Draw(EA2, EB2, C, RadToDeg(Ang4));
               }
        if(CheckBox1->Checked==true) { Application->ProcessMessages(); }
    }
    //----------------------------------------------------------------------

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {

         Image1->Canvas->FillRect(Rect (0,0,Image1->Width, Image1->Height));
         Image1->Canvas->Pen->Width = 1;
         Image1->Canvas->Pen->Color = clGreen;   //clBlack;
          M = (float)UpDown3->Position / 10;
        Label3->Caption = FloatToStrF( M, ffFixed, 3, 1);
        Draw( 400, Image1->Height -30 , 70, -90);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::UpDown3Click(TObject *Sender, TUDBtnType Button)
    {
       Button1Click(Sender);
    }
    //------------------------------------------------------------------------
    //
    //         КВАДРАТЫ ФРАКТАЛ ДЕРЕВО ПИФАГОРА
    //
    //---------------------------------------------------------------------
    void __fastcall TForm1::Traf( double xA, double yA, double xB, double yB, int r)
          {
             knx[r + 4] = xA;   kny[r + 4] = yA;
             knx[r + 3] = xB;   kny[r + 3] = yB;
             double xC = knx[r] = xA + yA - yB; 
             double yC = kny[r] = yA + xB - xA;
              double xD = knx[r + 2] = xB + yA - yB;
              double yD = kny[r + 2] = yB + xB - xA;
             knx[r + 1] = (xC + xD*q*q + (yC - yD)*q)/(1 + q*q);
             kny[r + 1] = (yC + yD*q*q + (xD - xC)*q)/(1 + q*q);

          }
    //--------------------------------------------------------
     void __fastcall TForm1::Fract(void)
          {
             Traf (-0.15,  -0.5,  0.15,  -0.5,  0);
              for (int i = 0;  i < 5*(pow(2, n) - 1);  i += 5)
                 {
                    Traf(knx[i], kny[i], knx[i+1], kny[i+1], 5*r);
                    Traf(knx[i+1], kny[i+1], knx[i+2], kny[i+2], 5*(r+1));
                     r = r + 2;
                 }

          }

    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
           r = 1; q = 1; n = 10;

         Image1->Canvas->FillRect( Rect ( 0, 0, Image1->Width, Image1->Height ) );
         Image1->Canvas->Pen->Width = 1;
         Image1->Canvas->Pen->Color = RGB( 75, 75, 2 );//  clTeal;    //clGreen;
          n = (double) UpDown1->Position ;
          Label1->Caption=n;
          q = (float)UpDown2->Position / 10 + 0.9;
          Label2->Caption=FloatToStr(q);

           Fract();

           int k = 400;  int y = 210;  int x = 450; int a = 500;

             for (int i = 0; i < 5 * r; i += 5) {
        Image1->Canvas->MoveTo(knx[i]*k+x,a-( kny[i]*k+y)); Image1->Canvas->LineTo(knx[i+1]*k+x, a-(kny[i+1]*k+y));
        Image1->Canvas->MoveTo(knx[i]*k+x, a-(kny[i]*k+y));     Image1->Canvas->LineTo(knx[i+2]*k+x, a-(kny[i+2]*k+y));
        Image1->Canvas->MoveTo(knx[i+1]*k+x, a-(kny[i+1]*k+y));  Image1->Canvas->LineTo(knx[i+2]*k+x, a-(kny[i+2]*k+y));
        Image1->Canvas->MoveTo(knx[i+2]*k+x, a-(kny[i+2]*k+y));  Image1->Canvas->LineTo(knx[i+3]*k+x, a-(kny[i+3]*k+y));
        Image1->Canvas->MoveTo(knx[i+4]*k+x, a-(kny[i+4]*k+y));  Image1->Canvas->LineTo(knx[i]*k+x, a-(kny[i]*k+y));
        }

    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::UpDown1Click(TObject *Sender, TUDBtnType Button)
    {
       Button2Click(Sender);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::UpDown2Click(TObject *Sender, TUDBtnType Button)
    {
       Button2Click(Sender);
    }

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

    =

    =

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

    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    #include <math.h>
    #include <Math.hpp>

    #include <ComCtrls.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:    // IDE-managed Components
            TButton *Button1;
            TImage *Image1;
            TButton *Button2;
            TUpDown *UpDown1;
            TUpDown *UpDown2;
            TUpDown *UpDown3;
            TLabel *Label1;
            TLabel *Label2;
            TLabel *Label3;
            TLabel *Label4;
            TBevel *Bevel1;
            TCheckBox *CheckBox1;
            void __fastcall Button1Click(TObject *Sender);
            void __fastcall Button2Click(TObject *Sender);
            void __fastcall UpDown1Click(TObject *Sender, TUDBtnType Button);
            void __fastcall UpDown2Click(TObject *Sender, TUDBtnType Button);
            void __fastcall UpDown3Click(TObject *Sender, TUDBtnType Button);
    private:    // User declarations
    public:        // User declarations
             double Pi;
             float M;
             int r;  double q, n;
             static  const int m=33000;
             double knx[m],  kny[m];

             void __fastcall RLine(double A,double B,double A1,double B1);

             void __fastcall Draw(double A,double B,double C,double Angl);

             void __fastcall Traf( double xA, double yA, double xB, double yB, int r);

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

     

    =

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