@@ -15,20 +15,24 @@ long double zoom=150;
1515long double xJul,yJul;
1616int fractal=1 ;
1717long double startX,startY,start_X,start_Y;
18- int maxIter =1000 ;
19- int maxIter2=1000 ;
18+ int maxIter =250 ;
19+ int maxIter2=250 ;
2020long double zoomFactor=1.0 ;
2121float period=0 ,iterations=0 ,iter=0 ,log_zn,nu,r1,r2,g1,g2,b1,b2,deltaX,deltaY,t;
2222void reset (){
2323 xPos=-3.2 ;yPos=-2.0 ;zoom=150 ;render=true ;glutPostRedisplay ();
2424}
25- bool inCardioidOrBulb (double x, double y) {
26- double y2 = y * y;
27- double q = (x - 0.25 ) * (x - 0.25 ) + y2;
25+ bool inCardioidOrBulb (long double x, long double y) {
26+ long double y2 = y * y;
27+ long double q = (x - 0.25 ) * (x - 0.25 ) + y2;
2828 return (q * (q + (x - 0.25 )) < y2 / 4.0 || (x + 1.0 ) * (x + 1.0 ) + y2 < 0.0625 );
2929}
3030
3131void key (unsigned char key, int x, int y) {
32+ if (key == 27 ) {
33+ std::cout << " Thank you for using https://github.com/iogameplayer/smoothmandelbrot.\n " ;
34+ exit (0 );
35+ }
3236 switch (key){
3337 case ' q' : {
3438 zoom *= 1.1 ;
@@ -45,11 +49,14 @@ void key(unsigned char key, int x, int y) {
4549 glutPostRedisplay ();
4650 break ;
4751 }
48- case ' +' : {maxIter *= 1.1 ;maxIter2 = maxIter;std::cout << " Maximum iterations: " << maxIter << " \n " ;render = true ;glutPostRedisplay ();break ;}
49- case ' =' : {maxIter *= 1.1 ;maxIter2 = maxIter;std::cout << " Maximum iterations: " << maxIter << " \n " ;render = true ;glutPostRedisplay ();break ;}
50- case ' -' : {maxIter /= 1.1 ;maxIter2 = maxIter;if (maxIter<10 ){maxIter=10 ;}std::cout << " Maximum iterations: " << maxIter << " \n " ;render = true ;glutPostRedisplay ();break ;}
52+ case ' +' : {maxIter *= 1.1 ;if (maxIter> 1000000 ){maxIter= 1000000 ;} maxIter2 = maxIter;std::cout << " Maximum iterations: " << maxIter << " \n " ;render = true ;glutPostRedisplay ();break ;}
53+ case ' =' : {maxIter *= 1.1 ;if (maxIter> 1000000 ){maxIter= 1000000 ;} maxIter2 = maxIter;std::cout << " Maximum iterations: " << maxIter << " \n " ;render = true ;glutPostRedisplay ();break ;}
54+ case ' -' : {maxIter /= 1.1 ;maxIter2 = maxIter;if (maxIter<10 ){maxIter=10 ;}std::cout << " Maximum iterations: " << maxIter << " \n " ;render = true ;glutPostRedisplay ();if (maxIter> 1000000 ){maxIter= 1000000 ;} break ;}
5155 case ' b' : {biomorph=!biomorph;glutPostRedisplay ();break ;}
5256 case ' s' : {smooth =!smooth; glutPostRedisplay ();break ;}
57+ case ' 4' : {fractal=4 ;std::cout << " -New Fractal?-\n " ; break ;}
58+ // case '5': {fractal=5;std::cout << "----Newton----\n"; break;}
59+ case ' 3' : {fractal=3 ;std::cout << " ---Tri-corn---\n " ; break ;}
5360 case ' 2' : {fractal=2 ;std::cout << " -Burning Ship-\n " ; break ;}
5461 case ' 1' : {fractal=1 ;std::cout << " Mandelbrot Set\n " ; break ;}
5562 case ' r' : {reset ();break ;}
@@ -80,12 +87,21 @@ float escapesmooth(long double real, long double imag, int x, int y){
8087 iter=0.0 ;
8188 if (fractal==1 &&!julia){if (inCardioidOrBulb (real,imag)){return maxIter;}}
8289 while (iter<maxIter&&real*real+imag*imag<=16 ){
83- tempreal=real*real-imag*imag+r0;
84- if (fractal==2 ){
85- imag=-2 *abs (real*imag)+i0;}
86- else if (fractal==1 ){
87- imag=2 *real*imag+i0;}
88- real=tempreal;
90+ if (fractal==4 ){
91+ tempreal=real*imag+r0;
92+ imag=2 *real-imag+i0;
93+ real=tempreal;
94+ }
95+ else {
96+ tempreal=real*real-imag*imag+r0;
97+ if (fractal==2 ){
98+ imag=-2 *abs (real*imag)+i0;}
99+ else if (fractal==1 ){
100+ imag=2 *real*imag+i0;}
101+ else if (fractal==3 ){
102+ imag=-2 *real*imag+i0;}
103+ real=tempreal;
104+ }
89105 iter++;
90106 if (real==ro&&imag==io){
91107 iter=maxIter;
@@ -94,7 +110,7 @@ float escapesmooth(long double real, long double imag, int x, int y){
94110 // interesting effect
95111 if (biomorph){
96112 if (abs (real)>4 &&abs (imag)>4 ){
97- iter=real+ imag;
113+ iter=maxIter- abs ( real* imag)+ 0.1 ;
98114 break ;
99115 }
100116 }
@@ -189,6 +205,18 @@ void onMouseMove(int x, int y) {
189205 mouseX = x;
190206 mouseY = y;
191207}
208+ void specialfunc (int key, int x, int y){
209+ switch (key){
210+ case GLUT_KEY_UP:{
211+ yPos+=40 /zoom;break ;}
212+ case GLUT_KEY_DOWN:{
213+ yPos-=40 /zoom;break ;}
214+ case GLUT_KEY_RIGHT:{
215+ xPos+=40 /zoom;break ;}
216+ case GLUT_KEY_LEFT:{
217+ xPos-=40 /zoom;break ;}
218+ }
219+ }
192220int main (int argc, char ** argv){
193221 glutInit (&argc,argv);
194222 glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
@@ -202,6 +230,8 @@ int main(int argc, char** argv){
202230 glLoadIdentity ();
203231 glClearColor (0.0 ,0.0 ,0.0 ,1.0 );
204232 std::cout << " Maximum iterations: " << maxIter << " \n " ;
233+
234+ glutSpecialFunc (specialfunc);
205235 glutPassiveMotionFunc (onMouseMove);
206236 glutDisplayFunc (display);
207237 glutReshapeFunc (reshape);
0 commit comments