Skip to content

Commit ab3c8c7

Browse files
authored
Update mandel.cpp
added tricorn (press 3) and a weird fractal (press 4)
1 parent 7f40fc3 commit ab3c8c7

File tree

1 file changed

+45
-15
lines changed

1 file changed

+45
-15
lines changed

mandel.cpp

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,24 @@ long double zoom=150;
1515
long double xJul,yJul;
1616
int fractal=1;
1717
long double startX,startY,start_X,start_Y;
18-
int maxIter =1000;
19-
int maxIter2=1000;
18+
int maxIter =250;
19+
int maxIter2=250;
2020
long double zoomFactor=1.0;
2121
float period=0,iterations=0,iter=0,log_zn,nu,r1,r2,g1,g2,b1,b2,deltaX,deltaY,t;
2222
void 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

3131
void 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+
}
192220
int 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

Comments
 (0)