#include #include #include #include #include #define VENTANA_ANCHO (1920*2) #define VENTANA_ALTO (1080*2) #define ANCHO VENTANA_ANCHO #define ALTO VENTANA_ALTO #define MAX_BAILOUT 50000 double xc = -0.5, yc = 0; int bailout(double x0, double y0, double zoom) { x0 = x0 * zoom + xc; y0 = y0 * zoom + yc; if( (x0 > -1.2 && x0 <= -1.1 && y0 > -0.1 && y0 < 0.1) || (x0 > -1.1 && x0 <= -0.9 && y0 > -0.2 && y0 < 0.2) || (x0 > -0.9 && x0 <= -0.8 && y0 > -0.1 && y0 < 0.1) || (x0 > -0.69 && x0 <= -0.61 && y0 > -0.2 && y0 < 0.2) || (x0 > -0.61 && x0 <= -0.5 && y0 > -0.37 && y0 < 0.37) || (x0 > -0.5 && x0 <= -0.39 && y0 > -0.48 && y0 < 0.48) || (x0 > -0.39 && x0 <= 0.14 && y0 > -0.55 && y0 < 0.55) || (x0 > 0.14 && x0 < 0.29 && y0 > -0.42 && y0 < -0.07) || (x0 > 0.14 && x0 < 0.29 && y0 > 0.07 && y0 < 0.42) ) return MAX_BAILOUT; double x = 0; double y = 0; int n = 0; while(x*x + y*y <= 4 && n < MAX_BAILOUT) { double xtemp = x*x - y*y + x0; y = 2*x*y + y0; x = xtemp; n++; } return n; } unsigned int max(unsigned int m[ALTO][ANCHO]) { unsigned int max = 0; for(int i = 0; i < ALTO; i++) for(int j = 0; j < ANCHO; j++) if(m[i][j] > max) max = m[i][j]; return max; } void computar_intensidad(unsigned int m500[ALTO][ANCHO], unsigned int m5000[ALTO][ANCHO], unsigned int m50000[ALTO][ANCHO], double x0, double y0, double zoom) { x0 = x0 * zoom + xc; y0 = y0 * zoom + yc; double x = 0; double y = 0; int n = 0; while(x*x + y*y <= 4 && n < MAX_BAILOUT) { double xtemp = x*x - y*y + x0; y = 2*x*y + y0; x = xtemp; int xx = (x - xc) / zoom + ANCHO / 2; int yy = (y - yc) / zoom + ALTO / 2; if(xx > 0 && xx < ANCHO && yy > 0 && yy < ALTO) { if(n < 500) m500[yy][xx]++; if(n < 5000) m5000[yy][xx]++; m50000[yy][xx]++; } n++; } } int main() { double zoom = 1e-3; float step = 0.1; unsigned int (*m500)[ANCHO] = calloc(ANCHO * ALTO, sizeof(unsigned int)); unsigned int (*m5000)[ANCHO] = calloc(ANCHO * ALTO, sizeof(unsigned int)); unsigned int (*m50000)[ANCHO] = calloc(ANCHO * ALTO, sizeof(unsigned int)); for(double vy = -ALTO / 2; vy < ALTO / 2; vy += step) for(double vx = - ANCHO / 2; vx < ANCHO / 2; vx += step) { if(bailout(vx, vy, zoom) < MAX_BAILOUT) computar_intensidad(m500, m5000, m50000, vx, vy, zoom); } int max500 = max(m500); int max5000 = max(m5000); int max50000 = max(m50000); /* if(!max500) max500 = 1; if(!max5000) max5000 = 1; if(!max50000) max50000 = 1;*/ int mm = max500; if(max5000 > mm) mm = max5000; if(max50000 > mm) mm = max50000; printf("P3\n%d %d\n%d\n", ALTO, ANCHO, mm); for(int i = 0; i < ANCHO; i++) for(int j = 0; j < ALTO; j++) printf("%u %u %u\n", m50000[j][i], //* 255 / max50000, m5000[j][i], //* 255 / max5000, m500[j][i] //* 255 / max500 ); return 0; }