Bien pues para empezar primero cambiamos el color de la Forma a negro, y colocamos los siguientes componentes:
-1 botón
-1 Edit (con un valor inicial de 2)
-1 Edit (con un valor inicial de 12)
-1 UpDown (con un valor mínimo de 1 y máximo de 10, asociado con el Edit1)
-1 UpDown (con un valor mínimo de 1 y máximo de 13, asociado con el Edit2)
La forma en mi caso queda de la siguiente manera:
Ahora abrimos el archivo H y en la parte privada declaramos las siguientes variables:
private: // User declarations
int Paso, Signo, EjeX[4098], EjeY[4098], x1, y1, x2, y2;
Y en la parte pública declaramos la definición de los métodos que utilizaremos:
public: // User declarations
__fastcall TForm1(TComponent* Owner);
void TForm1::GenerarDragon();
Bueno pues enseguida declaramos el método GenerarDragon(), ahora en el archivo .cpp:
void TForm1::GenerarDragon()
{
int i, j, dx, dy;
j = Paso / 2;
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)) / Edit1->Text.ToInt();
EjeY[i + j] = EjeY[i] + (dy - (dx * Signo)) / Edit1->Text.ToInt();
this->Canvas->MoveTo(EjeX[i],EjeY[i]);
this->Canvas->LineTo(EjeX[i+j],EjeY[i+j]);
this->Canvas->MoveTo(EjeX[i+j],EjeY[i+j]);
this->Canvas->LineTo(EjeX[i+Paso],EjeY[i+Paso]);
Sleep(1);
}
}
//--------------------------------------------------------------------------
Ahora abrimos el Button1 y escribimos el código que tenemos a continuación:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Paso = 4096;
Signo = -1;
EjeX[1] = this->ClientWidth / 4;
EjeX[4097] = 3 * this->ClientWidth / 4;
EjeY[1] = EjeY[4097] = 2 * this->ClientHeight / 3;
this->Canvas->Pen->Color = clRed;
this->Canvas->MoveTo(EjeX[1],EjeY[1]);
this->Canvas->LineTo(EjeX[4097],EjeY[4097]);
for(int i = 1; i <= Edit2->Text.ToInt(); i++)
{
this->Repaint();
GenerarDragon();
Paso /= 2;
}
}
//---------------------------------------------------------------------------
Ahora abrimos en evento OnPaint de la Forma y escribimos la siguiente línea:
void __fastcall TForm1::FormResize(TObject *Sender)
{
Invalidate();
}
//---------------------------------------------------------------------------
Y pues eso es todo chavos ahora solo queda compilar nuestra aplicación y correrla para ver como funciona. Pueden mover los valores de los Edits para ver los diferentes efectos que se forman, el primero afectará la forma que tendrá el fractal al formarse y el segundo es el número de iteraciones que realizará la aplicación para formar el fractal. El resultado final es el siguiente:
No hay comentarios:
Publicar un comentario