当我在C中生成旨在表示Mandelbrot分形的PPM时,我只得到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;
}
我希望输出看起来像Mandelbrot分形,具有一定的精度,但是它只有16 200x200个“像素”,而不是64000个像素大小。