Ich versuche Code C++ zu machen, um das Mandlebrot-Set zu plotten. Wenn ich jedoch meinen Code ausführe, siehe unten, ist die Konvergenz schlecht. Wie repariere ich das? Ich habe unten einen Code zur Verfügung gestellt. Es gibt auch einen Screenshot des Mandelbrot-Sets, rot, und die Approximation meines Codes, Graustufen.Wie kann man die Genauigkeit der Iteration verbessern?
#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;
}
Wenn Sie Genauigkeit wollen, verwenden Sie keine Gleitkommaoperationen. –
@Rhymoid Ich fragte mich das gleiche. Es funktioniert, weil sie auf 0 initialisiert und nach jedem Pixel auf Null zurückgesetzt werden. Aber natürlich würde man in der Regel nur das Ineor in der inneren Schleife initalisieren (abhängig vom Compiler könnte dies sogar eine bessere Optimierung ermöglichen). –
@HagenvonEitzen Ja, ich bemerkte das 'ix = 0; iy = 0; 'später. Es ist nicht der am besten lesbare Code. Ich bezweifle, dass Compiler besser funktionieren würden, als wenn 'ix' und' iy' innerhalb der 'for (y- = 3; ...)' - Schleife deklariert werden. –