jueves, 22 de septiembre de 2011

Fractal del Dragon


En la imagen se ve el proceso que va tomando el codigo de este fractal. Abajo el codigo.



void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
        int i;
        Paso = 4096;
        Signo = -1;

        EjeX[1] = ClientWidth / 4;      //getmax
        EjeX[4097] = 3 * ClientWidth / 4;
        EjeY[1] = EjeY[4097] = 2 * ClientHeight / 3;
        randomize();

        Canvas->MoveTo(EjeX[1], EjeY[1]);
        Canvas->LineTo(EjeX[4097], EjeY[4097]);
       
        Sleep(1000);

        for(i = 1; i <= 13; i++)
        {
           //Repaint();
           Refresh();
           Canvas->TextOutA(5,5,"Curva fractal del dragon");
           GenerarDragon(TColor(RGB(random(256), 0 ,0)));
           Paso /= 2;
           Sleep(1000);
         
        }
        ///Sleep(10);
}
//---------------------------------------------------------------------------
 void TForm1::GenerarDragon(TColor color)
 {

        int i, j, dx, dy;
        j = Paso /2;

        Canvas->Pen->Color = color;
        Sleep(1000);

        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;

            Canvas->MoveTo(EjeX[i], EjeY[i]);
            Canvas->LineTo(EjeX[i + j], EjeY[i + j]);

            Canvas->MoveTo(EjeX[i + j], EjeY[i + j]);
            Canvas->LineTo(EjeX[i + Paso], EjeY[i + Paso]);
            Sleep(100);
        }

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




 abajo archivo .h

class TForm1 : public TForm
{
__published: // IDE-managed Components
        TTimer *Timer1;
        TButton *Button1;
        TButton *Button2;
        void __fastcall Timer1Timer(TObject *Sender);
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
private:       // User declarations

void GenerarDragon(TColor color);
int EjeX[4098], EjeY[4098], Paso, Signo;

public: // User declarations

        __fastcall TForm1(TComponent* Owner);
};

1 comentario: