Фрактал дерево пифагора
Фрактал дерево пифагора обдуваемое ветром
Фрактал дерево пифагора два варианта, анимация
Исходник и исполняемый файл здесь
С++ 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
=
|