Verbesserung meiner Mandelbrot set code

Habe ich Folgendes Mandelbrot set code in C. ich mache die Berechnung und Erstellung eines .ppm-Datei für die Letzte fraktal Bild. Der Punkt ist, dass mein fractal Bild auf dem Kopf steht, d.h. es wird um 90 Grad gedreht. Sie können es durch ausführen meines Codes:
./mandel > test.ppm

Auf der anderen Seite möchte ich auch die Farben einstellen. Ich möchte erreichen, das Fraktale Bild:

Verbesserung meiner Mandelbrot set code

Mein letztes Problem ist, dass mein code nicht überprüft, so dass die Laufzeit meines Codes. Ich habe den code für dieses Teil auch, aber wenn der code die Ausführung beendet, es drucken nicht die laufende Zeit. Wenn jemand die entsprechenden änderungen an meinem code und helft mir erreichen das fraktal-Bild, und stellen Sie die abgelaufene Zeit angezeigt ich würde mich freuen.

#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>

void color(int red, int green, int blue)
{
    fputc((char)red, stdout);
    fputc((char)green, stdout);
    fputc((char)blue, stdout);
}

int main(int argc, char *argv[])
{
    int w = 600, h = 400, x, y; 
    //each iteration, it calculates: newz = oldz*oldz + p, where p is the current pixel, and oldz stars at the origin
    double pr, pi;                   //real and imaginary part of the pixel p
    double newRe, newIm, oldRe, oldIm;   //real and imaginary parts of new and old z
    double zoom = 1, moveX = -0.5, moveY = 0; //you can change these to zoom and change position
    int maxIterations = 1000;//after how much iterations the function should stop

    clock_t begin, end;
    double time_spent;

    printf("P6\n# CREATOR: E.T /mandel program\n");
    printf("%d %d\n255\n",w,h);

    begin = clock();

    //loop through every pixel
    for(x = 0; x < w; x++) 
    for(y = 0; y < h; y++)
    {
        //calculate the initial real and imaginary part of z, based on the pixel location and zoom and position values
    pr = 1.5 * (x - w / 2) / (0.5 * zoom * w) + moveX;
        pi = (y - h / 2) / (0.5 * zoom * h) + moveY;
        newRe = newIm = oldRe = oldIm = 0; //these should start at 0,0
        //"i" will represent the number of iterations
        int i;
        //start the iteration process
        for(i = 0; i < maxIterations; i++)
        {
            //remember value of previous iteration
            oldRe = newRe;
            oldIm = newIm;
            //the actual iteration, the real and imaginary part are calculated
            newRe = oldRe * oldRe - oldIm * oldIm + pr;
            newIm = 2 * oldRe * oldIm + pi;
            //if the point is outside the circle with radius 2: stop
            if((newRe * newRe + newIm * newIm) > 4) break;
        }

        color(i % 256, 255, 255 * (i < maxIterations));

    }

    end = clock();

    time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
    printf("Elapsed time: %.2lf seconds.\n", time_spent);

    return 0;
}
InformationsquelleAutor | 2013-04-20
Schreibe einen Kommentar