DarkBeam
Global Moderator
Fractal Senior
Posts: 2512
Fragments of the fractal -like the tip of it
|
|
« Reply #15 on: February 28, 2011, 10:28:17 AM » |
|
Awasome Aexion!!!!!!!! I will try to transpose to MB3D formula one day for sure! If you know more variations please post
|
|
|
Logged
|
No sweat, guardian of wisdom!
|
|
|
DarkBeam
Global Moderator
Fractal Senior
Posts: 2512
Fragments of the fractal -like the tip of it
|
|
« Reply #16 on: March 01, 2011, 07:21:01 PM » |
|
I tried to translate the code to UF but it don't really works as expected. The limit is too unstable, and the generated spirals are too much deformed to look good Anyone knows? tester00 { ; ----------------
init: z = #pixel float x = real(z) float y = imag(z) ;float x2 = x float zz = @zinit float rad = 0 float rr = 0 int i = @itercnt loop:
; here is the main fmla ; ------------------- while i>1 x = x-@p y = y-@q zz = zz-@r rad=(x*x+y*y+zz*zz) x=x/rad y=-y/rad zz = (zz+@r)/rad i = i-1 endwhile ; ------------------- ;while i>1 rr=sqrt(@q*@q+@r*@r) y=y+2*@r/rr zz=zz-2*@q/rr rad=(x*x+y*y+zz*zz) x=4*rr*x/rad y=4*rr*(y/rad)-@r zz=4*rr*(zz/rad)+@q ;i = i-1 ;endwhile ; ------------------- z = x + flip(y) ;ends here bailout: false ;|z| > @bailout default: title = "Test function" center = (0,0) float param p caption = "p" default = 0 endparam float param q caption = "q" default = 1.9 endparam float param r caption = "r" default = .04 endparam float param zinit caption = "z init" default = 0 endparam int param itercnt caption = "Iter count" default = 30 endparam float param bailout caption = "Bailout" hint = "-disabled-" default = 1024 endparam }
|
|
|
Logged
|
No sweat, guardian of wisdom!
|
|
|
Aexion
|
|
« Reply #17 on: March 01, 2011, 10:08:00 PM » |
|
I tried to translate the code to UF but it don't really works as expected. The limit is too unstable, and the generated spirals are too much deformed to look good Anyone knows? tester00 { ; ----------------
init: z = #pixel float x = real(z) float y = imag(z) ;float x2 = x float zz = @zinit float rad = 0 float rr = 0 int i = @itercnt loop:
; here is the main fmla ; ------------------- while i>1 x = x-@p y = y-@q zz = zz-@r rad=(x*x+y*y+zz*zz) x=x/rad y=-y/rad zz = (zz+@r)/rad i = i-1 endwhile ; ------------------- ;while i>1 rr=sqrt(@q*@q+@r*@r) y=y+2*@r/rr zz=zz-2*@q/rr rad=(x*x+y*y+zz*zz) x=4*rr*x/rad y=4*rr*(y/rad)-@r zz=4*rr*(zz/rad)+@q ;i = i-1 ;endwhile ; ------------------- z = x + flip(y) ;ends here bailout: false ;|z| > @bailout default: title = "Test function" center = (0,0) float param p caption = "p" default = 0 endparam float param q caption = "q" default = 1.9 endparam float param r caption = "r" default = .04 endparam float param zinit caption = "z init" default = 0 endparam int param itercnt caption = "Iter count" default = 30 endparam float param bailout caption = "Bailout" hint = "-disabled-" default = 1024 endparam } Hello I tried your formula on UF, but got nothing (a blue image).. any hint about what im doing wrong? I just pasted the formula on the editor and used it with the default parameters..
|
|
|
Logged
|
| Fractals all the way.. Incendia for 3D Fractals Aural for Musical Fractals |
|
|
|
DarkBeam
Global Moderator
Fractal Senior
Posts: 2512
Fragments of the fractal -like the tip of it
|
|
« Reply #18 on: March 01, 2011, 10:31:06 PM » |
|
Whoa thanks for the reply! Well, I see something when I choose orbit traps or smooth as inside and outside colorings!
|
|
|
Logged
|
No sweat, guardian of wisdom!
|
|
|
Aexion
|
|
« Reply #19 on: March 01, 2011, 11:46:41 PM » |
|
Whoa thanks for the reply! Well, I see something when I choose orbit traps or smooth as inside and outside colorings! Blue all the way Can you post an image? BTW.. I have many 3D formulaes for escape time, but all coded in C, since they are a bit more complicated than the classic iteration schema.. if you can translate them I will post the most interesting ones..
|
|
|
Logged
|
| Fractals all the way.. Incendia for 3D Fractals Aural for Musical Fractals |
|
|
|
DarkBeam
Global Moderator
Fractal Senior
Posts: 2512
Fragments of the fractal -like the tip of it
|
|
« Reply #20 on: March 02, 2011, 12:01:24 AM » |
|
What you are waiting for? You want to hide them out? Spread your amazing knowledge please, I will try to make it work. But it is not guaranteed because I'm not that expert
|
|
|
Logged
|
No sweat, guardian of wisdom!
|
|
|
Aexion
|
|
« Reply #21 on: March 02, 2011, 01:51:32 AM » |
|
What you are waiting for? You want to hide them out? Spread your amazing knowledge please, I will try to make it work. But it is not guaranteed because I'm not that expert Amazing knowledge!?? me?.. no.. Im just an experimentalist.. Here is some some code: 1. First define this Global Array (I know..globals are ugly): float SAVEMANDELITER[130]; 2. on your main function, fill it with this procedure: SAVEMANDELITER[0]=0; for (int tr=1;tr<129;tr++) SAVEMANDELITER[tr]=pow(SAVEMANDELITER[tr-1],0.85)+0.1475;
Now, for every point in the space, use the following function: bool Newton(float x, float y, float z){ float a,b,c,d,e,f,d1,g1,e1,potential; float w,X1,Y1,Z1,xiter,yiter,W1,radius,radius1,angle,angle1, inside; char u_Counter; potential=0; if(z<=0)return (false); W1=0; a=x; b=y; inside=1000; radius=0; xiter=x; yiter=y; for(u_Counter=0;u_Counter<100;u_Counter++){ w=W1; c=xiter; d=yiter; const float X2=xiter*xiter; const float Y2=yiter*yiter; const float X3=X2*xiter; const float Y3=Y2*yiter; const float X4=X2*X2; const float Y4=Y2*Y2; const float X5=X4 - 6 *X2 *Y2 + Y4 - 1; const float Y5=4* X3 *yiter - 4.0*xiter *Y3; const float X6=4 *( X3 - 3.0*xiter *Y2 ); const float Y6= 4 *( 3 *X2 *yiter - Y3 ); const float den = 1.0f / (X6*X6 + Y6*Y6); X1 = xiter-(X5*X6 + Y5*Y6) * den; Y1 = yiter-(Y5*X6 - X5*Y6) * den; radius1=radius; radius=sqrt(X1*X1+Y1*Y1); if(radius<inside)inside=radius; xiter=X1; yiter=Y1; W1=SAVEMANDELITER[u_Counter]; //W1=powf(W1,0.85)+0.1475; //if you cannot use arrays.. runs slower.. if (fabs(radius-radius1)<0.01) break; } X1=a; Z1=b; potential=radius1; if (radius<10){potential=inside*5; } if(W1<z)return(false); if (radius<10)w=inside; f=((z-w)/(W1-w))*5; angle=10-radius1; angle1=radius-radius1; c=(c/10.0)*5; d=(d/10.0)*5; radius= 7 - (cos(c + 1.61803399*f) + cos(c - 1.61803399*f) + cos(f + 1.61803399*d) + cos(f - 1.61803399*d) + cos(d - 1.61803399*c) + cos(d + 1.61803399*c));
//if(potential<0)return false; else return true;
if (radius<4.8)return (true); return(false); } It returns TRUE if you're in the fractal..and FALSE if you're not..(or it was reversed..long time without touching this formula) you can also use the "potential" variable to define distance from the fractal surface, but the result is not very interesting.. Without much complexity, you can turn this formula into a Nova fractal..by just adding a C value.. If this is too complex, let me know and I will send something more simpler.. Good Luck ps. Completely this code is completely unoptimized..just to make things clear..
|
|
|
Logged
|
| Fractals all the way.. Incendia for 3D Fractals Aural for Musical Fractals |
|
|
|
DarkBeam
Global Moderator
Fractal Senior
Posts: 2512
Fragments of the fractal -like the tip of it
|
|
« Reply #22 on: March 02, 2011, 08:12:25 AM » |
|
1) I can't use any additional global variable. Only x,y,z,w and Cx,Cy,,Cz,Cw 2) It is hard for me use arrays (even nonglobal ones) You need it only for precalc pow? Okay I can call pow() instead, I have the opcode fast translated version. 3) MB formulas I can write have only a loop section. Moreover, they must return only 8. Instead I can make something like; if (radius<4. return 8; x = 1000, y=1000, z=1000, w=1000 ;forced bailout return 8; This solution works fine I have already tried it.
|
|
« Last Edit: March 02, 2011, 08:15:41 AM by DarkBeam »
|
Logged
|
No sweat, guardian of wisdom!
|
|
|
DarkBeam
Global Moderator
Fractal Senior
Posts: 2512
Fragments of the fractal -like the tip of it
|
|
« Reply #23 on: March 02, 2011, 08:21:36 AM » |
|
qfuchstester { ::y+tb/gn2lF1yOyNIQw7Wy/DIuHPNv8jExlcI/Ary5VEbsnWBDOYs2dyXfwP2RrUugaqqrqrG Gjm+kx91yCCJhJnVT/xJEjSeDHS311Sgc3iT3TaZLQcmH24qmtroPaHw0qm+zk1nsfTcjfjD MGts4otDb7NLJM410vb6/9UMs5HokwipHTP0MAKLmNLLof6s7dji6vAVcQW32I76uBVddQNP XCdkZzkXzq4dKlsuusYMEn3cmDxzm3xd1cFQGRn1bmzL0Mar2Gnpks1xHaayumbCAKZ51FNk P/T2Q5uBLvG1QF0mL+L6xU+CPXvbavPpFwe3/yguwWKndeWE6XxB75DY04XHzz3H82yicP/P lD9WT8Tp7lkxPYiDVb9unR8l5QId/Igh32XobwZ8eObebVGaKaGwsmjZseIS/wuSihk54RnR Q/g998W2HchouWpUiO+Fat8CmJECGXw3t5kiV3+BXdTTDrr5igrauIkimG1FqQKuQVssLXfv fOW+wzo8xnPXpKL+HgC7EzO= } A test render with my UF function. It looks promising but too much deformed! test2{ ::hOWEZin2lF1yOyJMQw7Ix/glvHG/AjnJR+SOkfgV58qOghpVM2EjR7O5rPGD7oVKcBoququ6 uHjQfCcftuiQSYyZN0fcAxpk3wh0dTXLjc3iT3Tm2rMiDeYjrG+ui+odATrG6PTWfy+N5FxF Bjzp1VlyK22DLJM4N0vD9/eKG28DUSYB6x0DDnxqrmhlF0PdU9uRRDrRrbvVeuKlqLsmOuQR mhJvR0oUS+NuquaMEn3cQR5M8OuLVoYkR0Z9wceamRbz24Mlk9N+wQT21cRMGls86SuN887/ Y4NidLWeNa+yB2fRPmMs8X7m27TGpI/zvA0F2S5cLarrQ/KOYPWeRwvOmbvP4t1V5a+fKH6t Q8Th7lE4Hg4QzWv7ZCfZOES3L5L82+8chdktn9WctJDNFhBMrp0j1iIzD7KJGSQZhzJofw+e eI6DuQ00py7tbiT0u2TYuUK5CZZBcQx7u+BXnWr530nECl+koVq1qTUZr8EVxzucea/cs8hn R5jDvQlPf/j0NQMH } These params look more promising. Too bad the figure tends to be smaller & smaller, it almost disappears for numiter > 70
|
|
« Last Edit: March 02, 2011, 08:36:13 AM by DarkBeam »
|
Logged
|
No sweat, guardian of wisdom!
|
|
|
Aexion
|
|
« Reply #24 on: March 02, 2011, 09:16:07 AM » |
|
1) I can't use any additional global variable. Only x,y,z,w and Cx,Cy,,Cz,Cw 2) It is hard for me use arrays (even nonglobal ones) You need it only for precalc pow? Okay I can call pow() instead, I have the opcode fast translated version. 3) MB formulas I can write have only a loop section. Moreover, they must return only 8. Instead I can make something like; if (radius<4. return 8; x = 1000, y=1000, z=1000, w=1000 ;forced bailout return 8; This solution works fine I have already tried it. Oh.. Perhaps something far more simpler is a good start (no globals, no arrays, no complex loops..just the simple old loop procedure): bool Mandel3TriZ(double x, double y, double z){ //space coordinates transformations.. //Turns the 3D space in an infinite amount //of 2D slices const double w=1/(x*x+y*y+z*z); const double dem=1-(z)*w; const double ctx =((x)*w)/dem; const double cty =((-y)*w)/dem; double Xp=0,Yp=0; double radius;
//put your favorite fractal iteration here //A simple Mandelbrot is show..but you can //try others.. for(unsigned char Counter=0;Counter<20;Counter++){ const double xs=Xp*Xp-Yp*Yp+ctx; const double ys=2*Xp*Yp+cty; Xp =xs; Yp = ys; radius=Xp*Xp+Yp*Yp; if (radius>100) break; const double w1=1/(xs*xs+ys*ys+z*z); const double dem1=1-(z)*w; Xp =((xs)*w1)/dem1; Yp =((-ys)*w1)/dem1;
} //false, the iteration took the blue pill //true, the iteration took the red pill if(radius<100) return false; else return true; }
//Based on the MandelBox..4D bool CheeseBox(double x, double y, double z){ const double ctx =(x + y + z); const double cty = (-x -y + z); const double ctz =(-x + y -z); const double ctw = (x -y -z); float w=0;//cheesebox //float w=pow(x*x+y*y+z*z,0.333); //cybertronian box for(unsigned char Counter=0;Counter<15;Counter++){ if(x>1)x=2-x; else if(x<-1)x=-2-x; if(y>1)y=2-y; else if(y<-1)y=-2-y; if(z>1)z=2-z; else if(z<-1)z=-2-z; if(w>1)w=2-w; else if(w<-1)w=-2-w; const float vm=sqrt(x*x+y*y+z*z+w*w);
if(vm<0.5){ x=x*4; y=y*4; z=z*4; w=w*4; } else if(vm<1){ const float vsq=vm*vm; x/=vsq; y/=vsq; z/=vsq; w/=vsq; } x=x*2+ctx; y=y*2+cty; z=z*2+ctz; w=w*2+ctw;
radius=sqrt(x*x+y*y+z*z+w*w);
if (radius>60) break; }
if(radius<60) return true; else return false; }
|
|
|
Logged
|
| Fractals all the way.. Incendia for 3D Fractals Aural for Musical Fractals |
|
|
|
DarkBeam
Global Moderator
Fractal Senior
Posts: 2512
Fragments of the fractal -like the tip of it
|
|
« Reply #25 on: March 02, 2011, 11:32:49 AM » |
|
Ok. But you have nothing to say about the other message? Thanks a lot for your time
|
|
|
Logged
|
No sweat, guardian of wisdom!
|
|
|
Aexion
|
|
« Reply #26 on: March 02, 2011, 12:19:12 PM » |
|
Ok. But you have nothing to say about the other message? Thanks a lot for your time Oh, yes, I forgot: Since the original iteration has many transformations, you must reflect that on the escape time iteration.. one solution for example is iterating both transformations but selecting only the most closest one to the starting point, but thats a brute force solution, and not always give good results.. There are better solutions (such as space partitioning), that most probably works better with this particular case. Ask to David Makin, since he has mastered those methods. btw, no idea how to use those parameters on UF (I'm a little outdated on the usage of most fractal programs..)
|
|
|
Logged
|
| Fractals all the way.. Incendia for 3D Fractals Aural for Musical Fractals |
|
|
|
DarkBeam
Global Moderator
Fractal Senior
Posts: 2512
Fragments of the fractal -like the tip of it
|
|
« Reply #27 on: March 02, 2011, 04:21:54 PM » |
|
Thanks for the help anyway
|
|
|
Logged
|
No sweat, guardian of wisdom!
|
|
|
fractalrebel
|
|
« Reply #28 on: March 02, 2011, 05:49:28 PM » |
|
A reminder, but I am sure you already know, Quasi-Fuchsian fractals from a Kleinian group, and the transforms are Mobius transforms, not affine transforms. There is a lot of information in the book Indra's Pearls by Mumford, Series and Wright. I have several UF formulas that deal with Kleinian groups based upon the Indra's Pearls book. None of them are really 3D - thats one of my many projects on the back burner. Here is a an example generated in UF:
|
|
|
Logged
|
|
|
|
fractalrebel
|
|
« Reply #29 on: March 02, 2011, 05:56:58 PM » |
|
This is still 2D but using spheres:
|
|
|
Logged
|
|
|
|
|