Páginas

domingo, 27 de noviembre de 2011

Dragon y Escena Fractal

DRAGON

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

#include
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
g = new Graficos(this->Canvas);
}
//---------------------------------------------------------------------------
void TForm1::GenerarDragon(int color)
{
int i,j,dx,dy;
j = paso/2;
Form1->Canvas->Pen->Color = (TColor)color + 120;
for(i = 1; i<= 4096; i+= paso)
{
dx = EjeX[paso + i] - EjeX[i];
dy = EjeY[paso + i]- EjeY[i];
signo *= -1;
EjeX[i+j]= EjeX[i] + (dx +(dy * signo))/2 ;
EjeY[i+j]= EjeY[i] + (dy -(dx * signo))/2;
if(color != 0)
{
g->lineaDDA(EjeX[i+j],EjeY[i+j],EjeX[i],EjeY[i]);
g->lineaDDA(EjeX[i + paso],EjeY[i+ paso],EjeX[i+j],EjeY[i+j]);
}
}
}

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
int i;
paso = 4096;
signo = -1;
EjeX[1] = this->Width/4;
EjeX[4097] = 3 * this->Width/4;
EjeY[1] = EjeY[4097] = 2* this->Height/3;
Form1->Canvas->Pen->Color = clBlack;
g->lineaDDA(EjeX[1],EjeY[1],EjeX[4097],EjeY[4097]);
Sleep(700);
for(int i = 1; i< 13;i++ )
{
GenerarDragon(i);
paso/=2;
Sleep(700);
this->Repaint();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer1->Enabled = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
Timer1->Enabled = true;
}
//---------------------------------------------------------------------------




ESCENA FRACTAL



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

#include
#include
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------

const double MAXSIZE=1000;
const double MAXLEVEL=6;


__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

}
double frct1[1000];

void subdivide(int p1 ,int p2,double std,double ratio);

void fractal(int y1,int y2, int maxlevel,double h , double scale)
{
int first,last;

double ratio,std;
first=0;
last= pow(2.0,(double) maxlevel);

frct1[first]=y1;
frct1[last]=y2;
ratio=1.0/pow(2.0,h);
std=scale*ratio;
subdivide(first,last,std,ratio);
}

void subdivide(int p1 ,int p2,double std,double ratio)
{
int midpnt;
double stdmid;
midpnt=(p1+p2)/2;

if(midpnt!=p1 && midpnt!=p2)
{
frct1[midpnt]=(frct1[p1]+frct1[p2])/2+(double)((random(16)-8))/8.0*std;
stdmid=std*ratio;
subdivide(p1,midpnt,stdmid,ratio);
subdivide(midpnt,p2,stdmid,ratio);
}
}

void TForm1::Draw_Fractal(void)
{
int i, x,xinc,l;
l=(int)pow(2.0,(double)MAXLEVEL);
xinc=Form1->PaintBox1->Width/l*3/2;
Form1->PaintBox1->Canvas->MoveTo(0,100);
for(i=0,x=0;i Form1->PaintBox1->Canvas->LineTo(x,(int)frct1[i]);
}


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



void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
randomize();
PaintBox1->Refresh();

//Cielo
PaintBox1->Canvas->Rectangle(0,0,PaintBox1->Width,PaintBox1->Height);
PaintBox1->Canvas->Brush->Color=RGB(151,232,244);
fractal(100,100,MAXLEVEL,0.5,50.0);
Draw_Fractal();
PaintBox1->Canvas->FloodFill(1,1,clBlack,fsBorder);

//aguita
PaintBox1->Canvas->Brush->Color=RGB(151,201,244);
fractal(170,170,MAXLEVEL,0.9,30.0);
Draw_Fractal();
PaintBox1->Canvas->FloodFill(1,240,clBlack,fsBorder);

//Sol
PaintBox1->Canvas->Brush->Color=clYellow;
PaintBox1->Canvas->Ellipse(250,20,290,60);
PaintBox1->Canvas->FloodFill(270,50,clBlack,fsBorder) ;

//montañita verde
PaintBox1->Canvas->Brush->Color=RGB(35,221,87);
PaintBox1->Canvas->FloodFill(270,150,clBlack,fsBorder);


}

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

void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
randomize();
PaintBox1->Refresh();

//Cielo
PaintBox1->Canvas->Rectangle(0,0,PaintBox1->Width,PaintBox1->Height);
PaintBox1->Canvas->Brush->Color=RGB(255,130,0);
fractal(100,100,MAXLEVEL,0.5,50.0);
Draw_Fractal();
PaintBox1->Canvas->FloodFill(1,1,clBlack,fsBorder);
// aguita
PaintBox1->Canvas->Brush->Color=RGB(185,134,97);
fractal(170,170,MAXLEVEL,0.9,30.0);
Draw_Fractal();
PaintBox1->Canvas->FloodFill(1,240,clBlack,fsBorder);

//Sol
PaintBox1->Canvas->Brush->Color=RGB(255,180,0);
PaintBox1->Canvas->Ellipse(250,20,290,60);
PaintBox1->Canvas->FloodFill(270,50,clBlack,fsBorder) ;

//montañita verde
PaintBox1->Canvas->Brush->Color=RGB(93,50,0);
PaintBox1->Canvas->FloodFill(270,150,clBlack,fsBorder);



}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer1->Enabled=true;
Timer2->Enabled=false;
Timer3->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
Timer1->Enabled=false;
Timer2->Enabled=true;
Timer3->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
Timer1->Enabled=false;
Timer2->Enabled=false;
Timer3->Enabled=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer3Timer(TObject *Sender)
{
randomize();
PaintBox1->Refresh();

//Cielo
PaintBox1->Canvas->Rectangle(0,0,PaintBox1->Width,PaintBox1->Height);
PaintBox1->Canvas->Brush->Color=RGB(1,18,95);
fractal(100,100,MAXLEVEL,0.5,50.0);
Draw_Fractal();
PaintBox1->Canvas->FloodFill(1,1,clBlack,fsBorder);
// aguita

PaintBox1->Canvas->Brush->Color=RGB(1,33,167);
fractal(170,170,MAXLEVEL,0.9,30.0);
Draw_Fractal();
PaintBox1->Canvas->FloodFill(1,240,clBlack,fsBorder);

//Sol
PaintBox1->Canvas->Brush->Color=RGB(236,236,236);
PaintBox1->Canvas->Ellipse(250,20,290,60);
PaintBox1->Canvas->FloodFill(270,50,clBlack,fsBorder) ;

//montañita verde
PaintBox1->Canvas->Brush->Color=RGB(0,0,0);
PaintBox1->Canvas->FloodFill(270,150,clBlack,fsBorder);

}
//---------------------------------------------------------------------------

No hay comentarios:

Publicar un comentario