如何提高迭代的准确性?

时间:2016-09-06 21:00:12

标签: c++ performance floating-accuracy

我试图制作代码c ++来绘制Mandlebrot Set。但是,每当我运行我的代码时,见下文,收敛性很差。我该如何解决这个问题?我在下面提供了一些代码。还有Mandelbrot Set的屏幕截图,红色和我的代码近似,灰度。

  #include <GL/glut.h>

void renderscene(void) {

  double x=0;
  double y=0;
  double ix=0;
  double iy=0;
  int n=1;

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  for(x=-3;x<3;x=x+0.01){
    for(y=-3;y<3;y=y+0.01){

      for(n=1;n<50;n=n+1){
        ix=ix*ix-iy*iy+x;
        iy=2*iy*ix+y;
        if(ix*ix+iy*iy>4){
          break;
        }
      }

      ix=0;
      iy=0;

      glPointSize(1);
      glColor3f(0.1*n,0.1*n,0.1*n);
      glBegin(GL_POINTS);
      glVertex2f(x*0.4,y*0.4);
      glEnd();
    }
  }

  glutSwapBuffers();

}


int main(int argc, char **argv) {

  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA);
  glutInitWindowPosition(300,200);
  glutInitWindowSize(500,500);
  glutCreateWindow("Hello");

  glutDisplayFunc(renderscene);

  glutMainLoop();

  return 1;
}

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:3)

您在计算新ix时使用了错误的iy

尝试

double nextix=ix*ix-iy*iy+x;
iy=2*iy*ix+y;
ix = nextix;