Conjunto de Mandlebrot en C/C++ usando gráficos

Fractales

Un fractal es un patrón interminable. Los fractales son patrones infinitamente complejos que son autosimilares en diferentes escalas. Se crean repitiendo un proceso simple una y otra vez en un ciclo de retroalimentación continuo. Matemáticamente, los fractales se pueden explicar de la siguiente manera.

  • La ubicación de un punto en una pantalla se introduce en una ecuación como su solución inicial y la ecuación se repite una gran cantidad de veces.
  • Si esa ecuación tiende a cero (es decir, el valor al final de las iteraciones es menor que el valor inicial), el punto se colorea de negro.
  • Si la ecuación tiende a infinito (es decir, el valor final es mayor que el valor inicial), dependiendo de la tasa de aumento (es decir, la tasa a la que el valor tiende a infinito), el píxel se pinta con un color apropiado.
  • Definición de Mandlebrot

    El conjunto de Mandelbrot es el conjunto de números complejos c para los cuales la función  f_c(z) = z^2 + cno diverge cuando se itera desde z =0, es decir, para los cuales la secuencia  f_c(0), f_c(f_c(0)), etc., permanece acotada en valor absoluto. En palabras simples, el conjunto de Mandelbrot es un conjunto particular de números complejos que tiene un límite fractal altamente intrincado cuando se grafica.


    Implementación

    #include <complex.h>
    #include <tgmath.h>
    #include <winbgim.h>
      
    // Defining the size of the screen.
    #define Y 1080
    #define X 1920
      
    // Recursive function to provide the iterative every 100th
    // f^n (0) for every pixel on the screen.
    int Mandle(double _Complex c,
               double _Complex t = 0,
               int counter = 0)
    {
      
        // To eliminate out of bound values.
        if (cabs(t) > 4) {
            putpixel(creal(c) * Y / 2 + X / 2,
                     cimag(c) * Y / 2 + Y / 2,
                     COLOR(128 - 128 * cabs(t) / cabs(c),
                           128 - 128 * cabs(t) / cabs(c),
                           128 - 128 * cabs(t) / cabs(c)));
            return 0;
        }
      
        // To put about the end of the fractal,
        // the higher the value of the counter,
        // The more accurate the fractal is generated,
        // however, higher values cause
        // more processing time.
        if (counter == 100) {
            putpixel(creal((c)) * Y / 2 + X / 2,
                     cimag((c)) * Y / 2 + Y / 2,
                     COLOR(255 * (cabs((t * t))
                                  / cabs((t - c) * c)),
                           0, 0));
            return 0;
        }
      
        // recursively calling Mandle with increased counter
        // and passing the value of the squares of t into it.
        Mandle(c, cpow(t, 2) + c, counter + 1);
      
        return 0;
    }
      
    int MandleSet()
    {
      
        // Calling Mandle function for every
        // point on the screen.
        for (double x = -2; x < 2; x += 0.0015) {
            for (double y = -1; y < 1; y += 0.0015) {
                double _Complex temp = x + y * _Complex_I;
                Mandle(temp);
            }
        }
        return 0;
    }
      
    int main()
    {
        initwindow(X, Y);
        MandleSet();
        getch();
        closegraph();
        return 0;
    }
    

    Producción

    Publicación traducida automáticamente

    Artículo escrito por PercyX y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *