Как получить больше деталей в изображении Мандельброта ppm - PullRequest
0 голосов
/ 27 марта 2019

Когда я генерирую PPM в C, целью которого является представление фрактала Мандельброта, я получаю только 4 пикселя с окраской, указывающей, что они попадают в набор. Это имеет смысл, однако, когда я масштабирую его, и мое изображение 800X800 с каждым пикселем, представляющим число от -2 до> 2, я не получаю никакой дополнительной детализации внутри фрактала, это всего лишь «4» пикселя, как на первом изображении, однако каждый из них имеет размер 200x200.

Я пробовал: -использование константы вместо (a / 4) и (b / 4) в моей второй функции. Изменение размеров изображения. использование констант в моем цикле FOR. - оценка каждого пикселя в функции main () вместо отдельной функции. - изменение значения моей итерационной переменной при тестировании на включение в набор.

#include <math.h>

int inMandelbrot(int x, int y, int a, int b);
int main(){
    const int dimx = 800, dimy = 800;
    int x,y;
    FILE *mandelbrot;
    mandelbrot = fopen("mandelbrot.ppm","w");
    fprintf(mandelbrot, "P3\n%d %d\n255\n", dimx, dimy);
        for (y=-dimy/2; y< dimy/2 ;++y){
            for(x=-dimx/2;x<dimx/2;++x){
                if (inMandelbrot(x,y,dimx,dimy)==1){
                    fprintf(mandelbrot, "0 255 0\n");
                }
                else if (inMandelbrot(x,y,dimx,dimy)==0){
                    fprintf(mandelbrot, "0 0 255\n");
                }
                else if (inMandelbrot(x,y,dimx,dimy)==2){
                    fprintf(mandelbrot, "225 225 225\n");
                }
            }
        }
       (void) fclose(mandelbrot);
        return 1;
}

int inMandelbrot(int x, int y, int a, int b){
    double xnew,xold,ynew,yold;
    double Ex=(x/(a/4));
    double Ey=(y/(b/4));
    int iterations=0;
        xnew=0;
        ynew=0;
        yold=0;
        xold=0;
        while((xnew*xnew+ynew*ynew<4)&&(iterations<10000)){
                xnew=(xold*xold-yold*yold)+Ex;
                ynew=(2*xold*yold)+Ey;
                iterations++;
                xold=xnew;
                yold=ynew;
        }
        if (xnew*xnew+ynew*ynew>=4){
                iterations--;
                return 1;
        }
        else if (iterations>=10000){
            return 0;
            }
        return 2;
    }

Я ожидаю, что результат будет выглядеть как фрактал Мандельброта с некоторой степенью точности, однако он имеет только 16 200x200 "пикселей" вместо 64000 пикселей размером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...