viernes, 9 de febrero de 2018

Fractal de Mandelbrot



Fractal de Mandelbrot


Si alguna vez has estado con deseos de hacer tu  primera formula para graficar un fractal, aquí te dejo un código que funciona con una librería que emula las librerías de borland para gráficos en turbo  c++, la ventaja es que es emulada para mingw estándar, este ejemplo parte con el supuesto de que ya cuentas con mingw y las librerías winbgim para mingw instaladas y funcionando.Este código lo puedes encontrar en el libro gráficos en turbo c++,  a continuación te dejo la imagen y el código , ademas de un breve vídeo.










Te dejo el código:

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <winbgim.h>
#include <math.h>


int ControladorGrafico;
int ModoGrafico;
int CodigoError = 0;

void Iniciar() {

ControladorGrafico = DETECT;
initgraph( &ControladorGrafico, &ModoGrafico,"");

CodigoError = graphresult();
if(CodigoError != grOk) {
printf(" Error en el sistema de gráficos: %s\n", grapherrormsg(CodigoError));
exit(1);
}

}


void Pausa() {
while(kbhit()) getch();
getch();
}


int maxX, maxY, Limite, i, j, Pasos, Terminar;
double PasoX, PasoY, PosX, PosY, OrigX, OrigY, DimX, DimY, IterX, IterY, TempX;

main() {
Iniciar();
maxX = getmaxx();
maxY = getmaxy();
Limite = 100;

OrigX = -2.0;
OrigY = -1.25;

DimX = 0.5;
DimY = 1.25;

PasoX = (DimX - OrigX) / maxX;
PasoY = (DimY - OrigY) / maxY;

for ( i=0; i<=maxX; i++)
                for ( j=0; j<= maxY; j++) {
                        PosX = OrigX + i * PasoX;
                        PosY = OrigY + j * PasoY;
                        IterX = 0.0;
                        IterY = 0.0;
                        Terminar = Pasos = 0;
                        while ( !Terminar ) {
                                TempX = ( IterX * IterX ) - ( IterY * IterY ) + PosX;
                                IterY = 2 * ( IterX * IterY ) + PosY;
                                IterX = TempX;
                                Pasos++;
                                if ( hypot( fabs(IterX), fabs(IterY)) >= 2.0)
                                        Terminar++;
                                if ( Pasos >= Limite )
                                        Terminar++;
                        }
                        if ( Pasos < Limite )
                                putpixel(i,j, Pasos);
                }
               
                Pausa();
                closegraph();
}









No hay comentarios: