Note that there are some explanatory texts on larger screens.

plurals
  1. POMandelbrot zooms but image shifts and gets shrunk
    primarykey
    data
    text
    <p>I have been doing Mandelbrot set and trying to zoom but zooming patters gets very troubling. When i zoom it zooms perfectly but the image size is reduced to half of the original. Next time I zoom again the pic size increases and tries to skip the viewing window. The code is in c++/opengl. I tried to make my code little clean before posting here.</p> <pre><code>#include &lt;GL/glut.h&gt; #include &lt;math.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; double dividecubesby = 700; double left = -2.0; double right = 2.0; double bottom = -2.0; double top = 2.0; int maxiteration = 128; int zoomlevel = 3; double baseSize = 4.0; double SizeReal; double SizeImage; double xco=0.0; double yco=0.0; void whatcoordinate(int x,int y) { int xp=x; int yp=y; double delta1 = (right-left); double tempx; double tempy; double delta=0.0; double l = dividecubesby/2; delta = delta1/dividecubesby; if((xp &gt; l) &amp;&amp; (yp &lt; l)) { tempx = xp*delta; tempy = yp*delta; xco = right - tempx; yco = top - tempy; if(xco &lt;0)xco=xco*-1; if(yco &lt;0)yco=yco*-1; } else if( (x &lt; l) &amp;&amp; (y &lt; l)) { tempx = xp*delta; tempy = yp*delta; xco = right - tempx; yco = top - tempy; if(xco &gt;0)xco=xco*-1; if(yco &lt;0) yco =yco*-1; } else if((x &lt; l) &amp;&amp; (y &gt; l)) { tempx = xp*delta; tempy = yp*delta; xco = right - tempx; yco = top - tempy; if(xco &gt;0)xco=xco*-1; if(yco &gt;0)yco=yco*-1; } else if((x &gt; l) &amp;&amp; (y &gt; l)) { tempx = xp*delta; tempy = yp*delta; xco = right - tempx; yco = right - tempy; if(xco &lt;0)xco=xco*-1; if(yco &gt;0)yco=yco*-1; } } void keyPressed(unsigned char key, int x, int y) { switch(key) { case 'z': printf("z pressed x= %d, y= %d \n",x,y); whatcoordinate(x,y); SizeReal = (pow(2.0, (-zoomlevel)))*baseSize; SizeImage = (pow(2.0, (-zoomlevel)))*baseSize; baseSize = right-left; left = xco- (SizeReal/2); right = xco + (SizeReal/2); bottom = yco - (SizeReal/2); top = yco + (SizeReal/2); dividecubesby = dividecubesby+500; maxiteration = maxiteration+500; zoomlevel=zoomlevel+1; glutPostRedisplay(); break; } } int mandtest(double Cr, double Ci) { double Zr = 0.0; double Zi = 0.0; int times = 0; double temp; Zr = Zr+Cr; Zi = Zi+Ci; while ((((Zr*Zr)+(Zi*Zi))&lt;=4) &amp;&amp; (times &lt; maxiteration)) { temp = (Zr*Zr)-(Zi*Zi); Zi = 2*Zr*Zi; Zr = temp+Cr; Zi = Zi+Ci; times = times+1; } return times; } void display() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0f,1.0f,1.0f); double deltax = ((right - left)/(dividecubesby-1));//this means length/700 double deltay = ((top- bottom)/(dividecubesby-1));// this means length/700 gluOrtho2D(left,right,bottom,top); glBegin(GL_POINTS); for(double x= left;x&lt;=right;x += deltax ) { for(double y= bottom; y&lt;=top;y += deltay ) { if((mandtest(x,y))==maxiteration) { glColor3f(1.0f,1.0f,1.0f); glVertex2f(x,y); } else { glColor3f((float)mandtest(x,y)/10,0.0f,(float)mandtest(x,y)/30); glVertex2f(x,y); } } } glEnd(); glFlush(); } void init() { glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); } int main(int argc, char ** argv) { glutInit(&amp;argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(dividecubesby,dividecubesby); glutCreateWindow("A Simple OpenGL Windows Application with GLUT"); init(); glutDisplayFunc(display); glutKeyboardFunc(keyPressed); glutMainLoop(); return 0; } </code></pre> <p>when executed </p> <p>1) <img src="https://i.stack.imgur.com/ctYy9.png" alt="enter image description here"> </p> <p>2)<img src="https://i.stack.imgur.com/M10I4.png" alt="enter image description here"></p> <p>3) <img src="https://i.stack.imgur.com/7y59w.png" alt="enter image description here"></p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload