Фрактал мальденброта на 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
=
|