miércoles, 4 de abril de 2012

Fractal De Henon

Hola de nueva cuenta amigos! Aquí me encuentro otra vez para continuar con más aplicaciones en C++ Builder. En este momento estamos analizando el tema de los fractales y en esta ocasión programaremos uno más el cual es llamado el fractal de Henon.

Para realizar esto lo primero que haremos será cambiar el colo de la Forma a verde (como siempre ya saben que este paso es opcional). Después todo lo que necesitaremos será colocar un botón sobre la Forma. Entonces procedemos con la parte del código, por lo pronto nuestra Forma debe quedar mas o menos así:


Ahora nos vamos al archivo H de nuestra aplicación y en la parte privada declaramos las siguientes variables:


private: // User declarations
        int maxX, maxY;
        double EscalaX, EscalaY, DespX, DespY;


Luego en la parte pública escribimos la definición del método que utilizaremos para generar el fractal:


public: // User declarations
        __fastcall TForm1(TComponent* Owner);
        void TForm1::ExtranioConfinador();


Bueno ahora abrimos el evento OnCreate de la Forma y en él escribimos el siguiente código para que las variables maxX y maxY carguen los valores apenas corramos nuestra aplicación:


void __fastcall TForm1::FormCreate(TObject *Sender)
{
        maxX=this->ClientWidth;
        maxY=this->ClientHeight;      
}
//---------------------------------------------------------------------------


Enseguida escribimos el código del método anteriormente definido, es decir, el método ExtranioConfinador(), este es el codigo:


void TForm1::ExtranioConfinador()
{
        int a,i,PosX,PosY, Color;
        double Xant,Xnuevo,Yant,Ynuevo;
        HDC hdc;
        Xant = Xnuevo = Yant = Ynuevo = 0;
        for(Color=1; Color<=15; Color++)
                for(i=1; i<=0x02ff; i++)
                {
                        Sleep(1);
                        Xnuevo = Yant + 1 - (1.4*Xant *Xant);
                        Ynuevo = 0.3 * Xant;
                        PosX = ( Xnuevo * maxX / 3 * EscalaX ) + maxX / 2 + DespX;
                        PosY = ( Ynuevo * maxY * EscalaY ) + maxY / 2 + DespY;
                        if(( PosX>=0)&&(PosX<=maxX)&&(PosY>=0)&&(PosY<=maxY))
                                this->Canvas->Pixels[PosX][PosY]=(TColor)Color;
                        Xant=Xnuevo;
                        Yant=Ynuevo;
                }
        this->Canvas->TextOutA(10,110,"CONFINADOR HENON");
        this->Canvas->TextOutA(10,130,EscalaX);
        this->Canvas->TextOutA(10,150,EscalaY);
        this->Canvas->TextOutA(10,170,DespX);
        this->Canvas->TextOutA(10,190,DespY);
}

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

Bien para terminar solo damos doble clic en el botón que habíamos colocado sobre la Forma y en el evento OnClic que se abre escribimos el código que tenemos a continuación:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        this->Repaint();
        EscalaX=1;
        EscalaY=1;
        DespX=0;
        DespY=0;
        ExtranioConfinador();
}
//---------------------------------------------------------------------------

Eso es todos chavos ahora solo queda compilar y correr nuestra aplicación y nos generará el efecto de la curva de Henon además nos desplegará en pantalla los valores de la escala en X, la escala en Y, así como los desplazamientos en X y en Y. Nuestra aplicación quedará de la siguiente manera:


Eso es todo por hoy amigos nos vemos en la próxima con un ejemplo más de los diferentes fractales que podemos generar mediante programación, espero que ya se sientan todos unos expertos en el C++ Builder y sino pues no queda de otra que seguir practicando. Hasta la vista amigos!.

No hay comentarios:

Publicar un comentario