I'm writing a program that plots the Mandelbrot set in C.
I've been able to display it and it looks fine however when I lower the number of iterations I get this effect that generates what I can only describe as "clouds":

And here's how it should look (I got it from a website) :
 .
.
How can I make mine look like the above? Here's the code that plots a single point:
double getFracPoint(double x,double y){
    //scale x and y
    x = x * ((plotEnd.x-plotStart.x) / SCREENWIDTH) + plotStart.x;
    y = y * ((plotEnd.y-plotStart.y) / SCREENHEIGHT) + plotStart.y;
    x/=zoom;
    y/=zoom;
    //instead of using the complex number library of the C standard
    //I decided to use regular numbers as it turns out to be faster.
    //The first number is the real part the second number is the imaginary
    //part.
    double z[2];
    z[0] = z[1] = 0;
    double c[2];
    c[0] = x;
    c[1] = y;
    int n = 0;
    for(int i = 0; i < ITERS; i++,n++){
        //if it's out of boundaries we are sure it does not belong to the set.
        if(z[0] > 4 || -4 > z[0] || -4 > z[1] || 4 < z[1])
            break;
        double t = z[1]; //store z[1]
        //multiply z to itself
        z[1] = (z[0] * z[1]) + (z[0] * z[1]);
        z[0] = z[0] * z[0] + -(t*t);
        //add C to Z
        z[0] += c[0];
        z[1] += c[1];
    }
    return (double)n/(double)ITERS;
}
What am I doing wrong here?
Your "out of bounds" test checks that z falls within a square of radius 4:
    if(z[0] > 4 || -4 > z[0] || -4 > z[1] || 4 < z[1])
The typical test, however, is to check the Euclidean distance from origin (i.e. the complex number norm, i.e. check that it falls within a circle of radius 4):
    if(z[0]*z[0] + z[1]*z[1] > 4*4)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With