代码帮助确定点是否在Mandelbrot集中(检查我的解决方案)

|| 这是我的函数,用于测试两个点x和y在MAX_ITERATION 255之后是否位于mandelbrot集中。如果不存在,则返回0,否则返回1。
int isMandelbrot (int x, int y) {


    int i;
    int j;
    double Re[255];
    double Im[255];
    double a;
    double b;
    double dist;
    double finaldist;
    int check;

    i=0;
    Re[0]=0;
    Im[0]=0;
    j=-1;
    a=0;
    b=0;

    while (i < MAX_ITERATION) {

        a = Re[j];
        b = Im[j];

        Re[i]=((a*a)-(b*b))+x;
        Im[i]=(2 * a * b) + y;

        i++;
        j++;
    }

    finaldist = sqrt(pow(Re[MAX_ITERATION],2)+pow(Im[MAX_ITERATION],2));

    if (dist > 2) { //not in mandelbrot
        check = 0;
    } else if (dist <= 2) { //in mandelbrot set
        check = 1;
    }

    return check;
}
鉴于它是正确的(有人可以验证...还是编写更有效的代码?)。 这是我的打印代码,但是不起作用! (它一直在给出所有点都在集合中)。我在这里做错了什么?
int main(void) {

    double col;
    double row;

   int checkSet;

    row = -4;
    col = -1;

    while (row < 1.0 ) {
        while (col < 1.0) {
        checkSet = isMandelbrot(row, col);
            if (checkSet == 1) {
                printf(\"-\");
            } else if (checkSet == 0) {
                printf(\"*\");
            }
            col=col+0.5;
        }
        col=-1;
        row=row+0.5;
        printf(\"\\n\");
    }
return 0;
}
    
已邀请:
您的代码中有一些错误。例如,您这样做:
a = Re[j];
b = Im[j];
但是在第一次迭代中,
j = -1
,因此您将获得数组索引-1处的值。那不是你想做的。 另外,为什么是
Re
Im
数组-您真的需要在计算中跟踪所有中间结果吗? Wikipedia包含该算法的伪代码,您可能需要对照该代码检查自己的代码。     
另一个错误:您的函数采用
int
参数,因此
double
输入的值将被截断(即小数部分将被丢弃)。     
您可能应该在while循环中检查转义。这就是说,如果((a * a + b * b)> 4)在任何时候都表示该像素已逸出,那么故事就结束了。通过继续迭代这些像素以及浪费CPU周期,您的值将无限制地增长,并且似乎超出了
double
可以表示的结果-结果为
NaN
,因此您的finaldist计算会产生垃圾。 我认为您将从主要解决方案中受益。您在此处输入的代码计算的像素不足,无法真正看到其中的大部分内容。     

要回复问题请先登录注册