Open In App

Mandelbrot Set in C/C++ Using Graphics

Last Updated : 06 Dec, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Fractals

A Fractal is a never-ending pattern. Fractals are infinitely complex patterns that are self-similar across different scales. They are created by repeating a simple process over and over in an ongoing feedback loop. Mathematically fractals can be explained as follows.

  • The location of a point on a screen is fed into an equation as its initial solution and the equation is iterated a large number of times.
  • If that equation tends to zero (i.e. the value at the end of the iterations is smaller than the initial value), the point is coloured black.
  • If the equation tends to infinity (i.e. the final value is larger than the initial value) then depending on the rate of increase (i.e. the rate at which the value tends to infinity), the pixel is painted with an appropriate colour.

Defining Mandelbrot

The Mandelbrot set is the set of complex numbers c for which the function f_c(z) = z^2 + c  does not diverge when iterated from z=0, i.e., for which the sequence f_c(0), f_c(f_c(0))  , etc., remains bounded in absolute value. In simple words, Mandelbrot set is a particular set of complex numbers which has a highly convoluted fractal boundary when plotted. Implementation 

CPP14

#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;
}

                    

Output



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads