cp_95771(QUATERNION) { /* Copyright Matthew Benesi All Rights Reserved */ /* These formulas are only authorized for distribution with ChaosPro */ /* Derivative works may not be distributed without authors permission */ /* 2/11/2010 */ parameter real bailout; parameter quaternion perturb; parameter quaternion c; real sx,sx2,sy,sy2,sz,sz2,sw,sv,su; real nx,nx2,ny,ny2,nz,nz2,nw,nv,nu; real r,r1,r2,r3,r1b,r2b,r3b,a,b,bail; parameter int fractaltype; parameter int assignment,zvalue; complex victor,bravo,cramden; real cr,ci,cj,ck,cw,cv,cu,i; real checkvar,theta,phi,tango,whiskey,foxtrot,gamma; real pixelr,pixeli,pixelj,pixelw,pixelmag,pixelv,pixelu; parameter real n; parameter bool juliaMode,r2mode,colormodeB,colormodeC; void init(void) { if (fractaltype=="mag vs xyz") { checkvar=n*sqrt(2); } cr=part_r(c); ci=part_i(c); cj=part_j(c); pixelr=part_r(pixel); pixeli=part_i(pixel); pixelj=part_j(pixel); pixelmag=cabs(pixel); if (assignment=="Magnitude") { pixelw=sqrt(pixeli^2+pixelj^2); pixelv=sqrt(pixelr^2+pixelj^2); pixelu=sqrt(pixelr^2+pixeli^2); cw=sqrt(ci^2+cj^2); cv=sqrt(cr^2+cj^2); cu=sqrt(cr^2+ci^2); } else if (assignment=="-Magnitude") { pixelw=0-sqrt(pixeli^2+pixelj^2); pixelv=0-sqrt(pixelr^2+pixelj^2); pixelu=0-sqrt(pixelr^2+pixeli^2); cw=0-sqrt(ci^2+cj^2); cv=0-sqrt(cr^2+cj^2); cu=0-sqrt(cr^2+ci^2); } else if (assignment=="-,+,+ Magnitude") { pixelw=0-sqrt(pixeli^2+pixelj^2); pixelv=sqrt(pixelr^2+pixelj^2); pixelu=sqrt(pixelr^2+pixeli^2); cw=0-sqrt(ci^2+cj^2); cv=sqrt(cr^2+cj^2); cu=sqrt(cr^2+ci^2); } else if (assignment=="-,-,+ Magnitude") { pixelw=0-sqrt(pixeli^2+pixelj^2); pixelv=0-sqrt(pixelr^2+pixelj^2); pixelu=sqrt(pixelr^2+pixeli^2); cw=0-sqrt(ci^2+cj^2); cv=0-sqrt(cr^2+cj^2); cu=sqrt(cr^2+ci^2); } else if (assignment=="-,+,- Magnitude") { pixelw=0-sqrt(pixeli^2+pixelj^2); pixelv=sqrt(pixelr^2+pixelj^2); pixelu=0-sqrt(pixelr^2+pixeli^2); cw=0-sqrt(ci^2+cj^2); cv=sqrt(cr^2+cj^2); cu=0-sqrt(cr^2+ci^2); } else if (assignment=="+,-,+ Magnitude") { pixelw=sqrt(pixeli^2+pixelj^2); pixelv=0-sqrt(pixelr^2+pixelj^2); pixelu=sqrt(pixelr^2+pixeli^2); cw=sqrt(ci^2+cj^2); cv=0-sqrt(cr^2+cj^2); cu=sqrt(cr^2+ci^2); } else if (assignment=="+,-,- Magnitude") { pixelw=sqrt(pixeli^2+pixelj^2); pixelv=0-sqrt(pixelr^2+pixelj^2); pixelu=0-sqrt(pixelr^2+pixeli^2); cw=sqrt(ci^2+cj^2); cv=0-sqrt(cr^2+cj^2); cu=0-sqrt(cr^2+ci^2); } else if (assignment=="+,+,- Magnitude") { pixelw=sqrt(pixeli^2+pixelj^2); pixelv=sqrt(pixelr^2+pixelj^2); pixelu=0-sqrt(pixelr^2+pixeli^2); cw=sqrt(ci^2+cj^2); cv=sqrt(cr^2+cj^2); cu=0-sqrt(cr^2+ci^2); } else if (assignment=="Linear Sign Magnitude") { if (pixelr<0) { pixelw=0-sqrt(pixeli^2+pixelj^2); } else { pixelw=sqrt(pixeli^2+pixelj^2); } if (pixeli<0) { pixelv=0-sqrt(pixelr^2+pixelj^2); } else { pixelv=sqrt(pixelr^2+pixelj^2); } if (pixelj<0) { pixelu=0-sqrt(pixelr^2+pixeli^2); } else { pixelu=sqrt(pixelr^2+pixeli^2); } /* c variable assignments in each one as well */ if (cr<0) { cw=0-sqrt(ci^2+cj^2); } else { cw=sqrt(ci^2+cj^2); } if (ci<0) { cv=0-sqrt(cr^2+cj^2); } else { cv=sqrt(cr^2+cj^2); } if (cj<0) { cu=0-sqrt(cr^2+ci^2); } else { cu=sqrt(cr^2+ci^2); } } else { /* these variables will be used in all the next assignments */ pixelw=pixeli*abs(pixeli)+abs(pixelj)*pixelj; pixelv=pixelr*abs(pixelr)+abs(pixelj)*pixelj; pixelu=pixelr*abs(pixelr)+abs(pixeli)*pixeli; cw=ci*abs(ci)+abs(cj)*cj; cv=cr*abs(cr)+abs(cj)*cj; cu=cr*abs(cr)+abs(ci)*ci; if (assignment=="Planar Sign Magnitude") { if (pixelw<0) { pixelw=0-sqrt(pixeli^2+pixelj^2); } else { pixelw=sqrt(pixeli^2+pixelj^2); } if (pixelv<0) { pixelv=0-sqrt(pixelr^2+pixelj^2); } else { pixelv=sqrt(pixelr^2+pixelj^2); } if (pixelu<0) { pixelu=0-sqrt(pixelr^2+pixeli^2); } else { pixelu=sqrt(pixelr^2+pixeli^2); } if (cw<0) { cw=0-sqrt(ci^2+cj^2); } else { cw=sqrt(ci^2+cj^2); } if (cv<0) { cv=0-sqrt(cr^2+cj^2); } else { cv=sqrt(cr^2+cj^2); } if (cu<0) { cu=0-sqrt(cr^2+ci^2); } else { cu=sqrt(cr^2+ci^2); } } else if (assignment=="Complexitude") { pixelw=sqrt(abs(pixelw)); pixelv=sqrt(abs(pixelv)); pixelu=sqrt(abs(pixelu)); cw=sqrt(abs(cw)); cv=sqrt(abs(cv)); cu=sqrt(abs(cu)); } else if (assignment=="-Complexitude") { pixelw=0-sqrt(abs(pixelw)); pixelv=0-sqrt(abs(pixelv)); pixelu=0-sqrt(abs(pixelu)); cw=0-sqrt(abs(cw)); cv=0-sqrt(abs(cv)); cu=0-sqrt(abs(cu)); } else if (assignment=="Linear Sign Complexitude") { if (pixelr<0) { pixelw=0-sqrt(abs(pixelw)); } else { pixelw=sqrt(abs(pixelw)); } if (pixeli<0) { pixelv=0-sqrt(abs(pixelv)); } else { pixelv=sqrt(abs(pixelv)); } if (pixelj<0) { pixelu=0-sqrt(abs(pixelu)); } else { pixelu=sqrt(abs(pixelu)); } if (cr<0) { cw=0-sqrt(abs(cw)); } else { cw=sqrt(abs(cw)); } if (ci<0) { cv=0-sqrt(abs(cv)); } else { cv=sqrt(abs(cv)); } if (cj<0) { cu=0-sqrt(abs(cu)); } else { cu=sqrt(abs(cu)); } } else if (assignment=="Planar Sign Complexitude") { if (pixelw<0) { pixelw=0-sqrt(abs(pixelw)); } else { pixelw=sqrt(abs(pixelw)); } if (pixelv<0) { pixelv=0-sqrt(abs(pixelv)); } else { pixelv=sqrt(abs(pixelv)); } if (pixelu<0) { pixelu=0-sqrt(abs(pixelu)); } else { pixelu=sqrt(abs(pixelu)); } if (cw<0) { cw=0-sqrt(abs(cw)); } else { cw=sqrt(abs(cw)); } if (cv<0) { cv=0-sqrt(abs(cv)); } else { cv=sqrt(abs(cv)); } if (cu<0) { cu=0-sqrt(abs(cu)); } else { cu=sqrt(abs(cu)); } } } if (juliaMode) { sx=pixelr; sy=pixeli; sz=pixelj; sw=pixelw; sv=pixelv; su=pixelu; } else { sx=cr; sy=ci; sz=cj; sw=cw; sv=cv; su=cu; } if (fractaltype=="Type B1" || "Type C1") { sx2=(sx); sy2=(sy); sz2=(sz); } if (fractaltype=="Type C2") { sx2=(sx); sx=sx2; sy2=(sy); sy=sy2; sz2=(sz); sz=sz2; } } void loop(void) { if (fractaltype=="Complex Compound") { r1=sqrt(sqr(sy)+sqr(sz)); if (n==11) { r3=sqr(sqr(sqr(r1)))*sqr(r1)*r1; } else if (n==13) { r3=sqr(sqr(sqr(r1)))*sqr(sqr(r1))*r1; } else if (n==15) { r3=sqr(sqr(sqr(r1)))*sqr(sqr(r1))*sqr(r1)*r1; } else if (n==16) { r3=sqr(sqr(sqr(sqr(r1)))); } else if (n==17) { r3=sqr(sqr(sqr(sqr(r1))))*r1; } else { r3=r1^n; } r3=r3^(-1); //r2=(sqr(sx)+sqr(sy)+sqr(sz))^(-n/2); victor=complex(sx,r1); bravo=complex(sy,sz); if (n==11) { victor=sqr(sqr(sqr(victor)))*sqr(victor)*victor; } else if (n==13) { victor=sqr(sqr(sqr(victor)))*sqr(sqr(victor))*victor; } else if (n==15) { victor=sqr(sqr(sqr(victor)))*sqr(sqr(victor))*sqr(victor)*victor; } else if (n==16) { victor=sqr(sqr(sqr(sqr(victor)))); } else if (n==17) { victor=sqr(sqr(sqr(sqr(victor))))*victor; } else { victor=victor^n; } if (n==11) { bravo=sqr(sqr(sqr(bravo)))*sqr(bravo)*bravo; } else if (n==13) { bravo=sqr(sqr(sqr(bravo)))*sqr(sqr(bravo))*bravo; } else if (n==15) { bravo=sqr(sqr(sqr(bravo)))*sqr(sqr(bravo))*sqr(bravo)*bravo; } else if (n==16) { bravo=sqr(sqr(sqr(sqr(bravo)))); } else if (n==17) { bravo=sqr(sqr(sqr(sqr(bravo))))*bravo; } else { bravo=bravo^n; } nx=part_r(victor); ny=part_i(victor)*part_r(bravo)*r3; nz=part_i(victor)*part_i(bravo)*r3; if (juliaMode) { sx=nx+cr; sy=ny+ci; sz=nz+cj; } else { sx=nx+(pixelr); if (r2mode) { sy=ny+abs(pixeli); } else { sy=ny+(pixeli); } sz=nz+(pixelj); } if (colormodeB) { z=quaternion(real(bravo),imag(bravo),real(victor),imag(victor)); } else if (colormodeC) { z=quaternion(nx,ny,nz,0); r=cabs(z); z=quaternion(r,sx,sy,sz); } else { z=quaternion(sx,sy,sz,0); r=cabs(z); z=quaternion(r,sx,sy,sz); } bail=abs(sx)+abs(sy)+abs(sz); } else if (fractaltype=="Mandelbrot 3d") { r2=(sqr(sx)+sqr(sy)+sqr(sz))^(n/2); theta=atan2((sx)+flip(sqrt(sqr(sy)+sqr(sz)))); phi=atan2((sy)+flip((sz))); nx=r2*cos(theta*n); ny=r2*sin(theta*n)*cos(phi*n); nz=r2*sin(theta*n)*sin(phi*n); if (juliaMode) { sx=nx+cr; sy=ny+ci; sz=nz+cj; } else { sx=nx+(pixelr); sy=ny+(pixeli); sz=nz+(pixelj); } z=quaternion (sx,sy,sz,0); r=cabs(z); z=quaternion(r,sx,sy,sz); bail=abs(sx)+abs(sy)+abs(sz); } else if (fractaltype=="mag vs xyz") { r=sqrt(sqr(sx)+sqr(sy)+sqr(sz)); r2=r^n; if (r2mode) { theta=atan2(sx*checkvar+flip(r)); phi=atan2(sy*checkvar+flip(r)); tango=atan2(sz*checkvar+flip(r)); } else { theta=atan2(abs(sx)*checkvar+flip(r)); phi=atan2(abs(sy)*checkvar+flip(r)); tango=atan2(abs(sz)*checkvar+flip(r)); } nx=r2*cos(theta*n); ny=r2*cos(phi*n); nz=r2*cos(tango*n); if (juliaMode) { sx=nx+cr; sy=ny+ci; sz=nz+cj; } else { sx=nx+pixelr; sy=ny+pixeli; sz=nz+pixelj; } z=quaternion(sx,sy,sz,0); r=cabs(z); z=quaternion(r,sx,sy,sz); bail=sqr(sx)+sqr(sy)+sqr(sz); } else if (fractaltype=="Type B1") { if (r2mode) { r2=(sqr(sx)+sqr(sy)+sqr(sz))^(n/2); } else { r2=((sqr(sx)+sqr(sx2))+sqr(sy)+sqr(sz))^(n/2); } theta=atan2(sx+flip(sy)); tango=atan2(sx2+flip(sz)); if (juliaMode) { sx=r2*cos(theta*n)+cr; sx2=r2*cos(tango*n)+cr; sy=r2*sin(theta*n)+ci; sz=r2*sin(tango*n)+cj; } else { sx=r2*cos(theta*n)+(pixelr); sx2=r2*cos(tango*n)+(pixelr); sy=r2*sin(theta*n)+abs(pixeli); sz=r2*sin(tango*n)+abs(pixelj); } z=quaternion (sx,sy,sz,0); r=cabs(z); z=quaternion(r,sx,sy,sz); bail=abs(sx)+abs(sy)+abs(sz); } else if (fractaltype=="Type C2") { if (r2mode) { r2= (sqr(sx)+sqr(sy)+sqr(sz))^(n/2); } else { if (colormodeB) { r1=(sqr(sx)+sqr(sy)+sqr(sz))^(n/2); r2=(sqr(sx2)+sqr(sy2)+sqr(sz2))^(n/2); } else { r2=(sqr(sx2)+sqr(sx)+sqr(sy2)+sqr(sy)+sqr(sz2)+sqr(sz))^(n/2); } } if (colormodeC) { theta=atan2(sx+flip(sy)); tango=atan2(sx+flip(sz)); whiskey=atan2(sy+flip(sz)); foxtrot=atan2(sz+flip(sy)); nx=r2*1*sqrt(cos(theta*n)^2+cos(tango*n)^2); ny=r2*1*sqrt(sin(theta*n)^2+cos(whiskey*n)^2); nz=r2*-1*sqrt(sin(tango*n)^2+sin(whiskey*n)^2); nx2=nx; ny2=ny; nz2=nz; } else { if (colormodeB) { theta=atan2(sx+flip(sy)); tango=atan2(sx2+flip(sz)); whiskey=atan2(sy2+flip(sz2)); nx=r2*cos(theta*n); nx2=r1*cos(tango*n); ny=r2*sin(theta*n); ny2=r1*cos(whiskey*n); nz=r2*sin(tango*n); nz2=r1*sin(whiskey*n); } else { theta=atan2(sx+flip(sy)); tango=atan2(sx2+flip(sz)); whiskey=atan2(sy2+flip(sz2)); nx=r2*cos(theta*n); nx2=r2*cos(tango*n); ny=r2*sin(theta*n); ny2=r2*cos(whiskey*n); nz=r2*sin(tango*n); nz2=r2*sin(whiskey*n); } } if (juliaMode) { sx=nx+cr; sx2=nx2+cr; sy=ny+ci; sy2=sy+ci; sz=sz+cj; sz2=sz2+cj; } else { sx=nx+(pixelr); sx2=nx2+pixelr; sy=ny+abs(pixeli); sy2=ny2+abs(pixeli); sz=nz+abs(pixelj); sz2=nz2+abs(pixelj); } bail=abs(sx)+abs(sy)+abs(sz); z=quaternion (sx,sy,sz,0); r=cabs(z); z=quaternion(r,sx,sy,sz); } else if (fractaltype=="Type R2 D2") { r2= sqrt((sx^2+sy^2+sz^2)^n+(sw^2+sv^2+su^2)^n); phi=atan2(sw+flip(sx)); tango=atan2(sv+flip (sy)); theta=atan2(su+flip(sz)); nx=r2*sin(n*phi) ; ny=r2*sin(n*tango); nz=r2*sin(n*theta); nw=r2*cos(n*phi) ; nv=r2*cos(n*tango) ; nu=r2*cos(n*theta) ; if (juliaMode) { sx=nx+cr; sy=ny+ci; sz=nz+cj; sw=nw+cw; sv=nv+cv; su=nu+cu; } else { sx=nx+pixelr; sy=ny+pixeli; sz=nz+pixelj; sw=nw+pixelw; sv=nv+pixelv; su=nu+pixelu; } bail=abs(sx)+abs(sy)+abs(sz); z=quaternion (sx,sy,sz,0); r=cabs(z); z=quaternion(r,sx,sy,sz); } else if (fractaltype=="R2 D2 intraplanar") { phi=atan2(sx+flip(sy)); /*su*/ tango=atan2(sy+flip(sz)); /*sw*/ theta=atan2(sx+flip(sz)); /*sv*/ sy2=sw*cos(n*tango); sz2=sw*sin(n*tango); sw=sqrt(sy2^2+sz2^2); sx2=su*cos(n*phi); sy2=su*sin(n*phi); su=sqrt(sx2^2+sy2^2); sx2=sv*cos(n*theta); sz2=sv*sin(n*theta); sv=sqrt(sx2^2+sz2^2); r2= sqrt((sx^2+sy^2+sz^2)^n+(sw^2+sv^2+su^2)^n); phi=atan2(sw+flip(sx)); tango=atan2(sv+flip (sy)); theta=atan2(su+flip(sz)); nx=r2*sin(n*phi) ; ny=r2*sin(n*tango); nz=r2*sin(n*theta); nw=r2*cos(n*phi) ; nv=r2*cos(n*tango) ; nu=r2*cos(n*theta) ; if (juliaMode) { sx=nx+cr; sy=ny+ci; sz=nz+cj; sw=nw+cw; sv=nv+cv; su=nu+cu; } else { sx=nx+pixelr; sy=ny+pixeli; sz=nz+pixelj; sw=nw+pixelw; sv=nv+pixelv; su=nu+pixelu; } bail=abs(sx)+abs(sy)+abs(sz); z=quaternion (sx,sy,sz,0); r=cabs(z); z=quaternion(r,sx,sy,sz); } else if (fractaltype=="Type D2") { r1= ((sx^2+sy^2+sz^2+sw^2+sv^2+su^2))^(n/2); r2=r1; phi=atan2(sw+flip(sx)); tango=atan2(sv+flip (sy)); theta=atan2(su+flip(sz)); nx=r1*sin(n*phi) ; ny=r1*sin(n*tango); nz=r1*sin(n*theta); nw=r2*cos(n*phi) ; nv=r2*cos(n*tango) ; nu=r2*cos(n*theta) ; if (juliaMode) { sx=nx+cr; sy=ny+ci; sz=nz+cj; sw=nw+cw; sv=nv+cv; su=nu+cu; } else { if (r2mode) { sx=nx+pixelr; sy=ny+abs(pixeli); sz=nz+pixelj; sw=nw+pixelw; sv=nv+abs(pixelv); su=nu+pixelu; } else { sx=nx+pixelr; sy=ny+pixeli; sz=nz+pixelj; sw=nw+pixelw; sv=nv+pixelv; su=nu+pixelu; } } bail=abs(sx)+abs(sy)+abs(sz); z=quaternion(sx,sy,sz,0); r=cabs(z); z=quaternion(r,sx,sy,sz); } else if (fractaltype=="Type D3") { r1=(sx^2+sw^2)^(n/2); r2=(sy^2+sv^2)^(n/2); r3=(sz^2+su^2)^(n/2); phi=atan2(sw+flip(sx)); tango=atan2(sv+flip (sy)); theta=atan2(su+flip(sz)); nx=r1*sin(n*phi) ; ny=r2*sin(n*tango); nz=r3*sin(n*theta); nw=r1*cos(n*phi) ; nv=r2*cos(n*tango) ; nu=r3*cos(n*theta) ; if (juliaMode) { sx=nx+cr; sy=ny+ci; sz=nz+cj; sw=nw+cw; sv=nv+cv; su=nu+cu; } else { sx=nx+pixelr; sy=ny+pixeli; sz=nz+pixelj; sw=nw+pixelw; sv=nv+pixelv; su=nu+pixelu; } bail=abs(sx)+abs(sy)+abs(sz); z=quaternion (sx,sy,sz,0); r=cabs(z); z=quaternion(r,sx,sy,sz); } else if (fractaltype=="Type C1") { r1=(sx^2+sy^2+sz^2)^(n/2); r2=r1; theta=atan2(sx+flip(sy)); tango=atan2(sx2+flip(sz)); whiskey=atan2(sy2+flip(sz2)); if (juliaMode) { sx=r1*cos(theta*n)+cr; sx2=r2*cos(tango*n)+cr; sy=r1*sin(theta*n)+ci; sy2=r2*cos(whiskey*n)+ci; sz=r1*sin(tango*n)+cj; sz2=r2*sin(whiskey*n)+cj; } else { sx=r1*cos(theta*n)+pixelr; sx2=r2*cos(tango*n)+pixelr; sy=r1*sin(theta*n)+pixeli; sy2=r2*cos(whiskey*n)+pixeli; sz=r1*sin(tango*n)+pixelj; sz2=r2*sin(whiskey*n)+pixelj; } bail=abs(sx)+abs(sy)+abs(sz); z=quaternion (sx,sy,sz,0); r=cabs(z); z=quaternion(r,sx,sy,sz); } } bool bailout(void) { return(bailcheck) { bravo=bravo-fold; } else if (real(bravo)<0-check) { bravo = complex(-real(bravo)-fold,imag(bravo)); } if (imag(bravo)>check) { bravo=complex(real(bravo),imag(bravo)-fold); } else if (imag(bravo)<0-check) { bravo = complex(real(bravo),-imag(bravo)-fold); } if (real(victor)>check) { victor=victor-fold; } else if (real(victor)<0-check) { victor = complex(-real(victor)-fold,imag(victor)); } if (sumode) { if (imag(victor)>check) { victor=complex(real(victor),imag(victor)-fold); } else if (imag(victor)<0-check) { victor = complex(real(victor),-imag(victor)-fold); } } r=abs(real(bravo))+abs(imag(bravo))+abs(real(victor)); if (r<(minRadius)) { t1=(sqr(fixedRadius)/sqr(minRadius)); bravo=bravo*t1; victor=victor*t1; } else if (r < (fixedRadius)) { t2=(sqr(fixedRadius)/(r)); bravo=bravo*t2; victor=victor*t2; } r1=cabs(bravo); if (n==11) { r3=sqr(sqr(sqr(r1)))*sqr(r1)*r1; } else if (n==13) { r3=sqr(sqr(sqr(r1)))*sqr(sqr(r1))*r1; } else if (n==15) { r3=sqr(sqr(sqr(r1)))*sqr(sqr(r1))*sqr(r1)*r1; } else if (n==16) { r3=sqr(sqr(sqr(sqr(r1)))); } else if (n==17) { r3=sqr(sqr(sqr(sqr(r1))))*r1; } else { r3=r1^n; } r3=r3^(-1); //r2=(sqr(sx)+sqr(sy)+sqr(sz))^(-n/2); victor=complex(real(victor),r1); if (n==11) { victor=sqr(sqr(sqr(victor)))*sqr(victor)*victor; } else if (n==13) { victor=sqr(sqr(sqr(victor)))*sqr(sqr(victor))*victor; } else if (n==15) { victor=sqr(sqr(sqr(victor)))*sqr(sqr(victor))*sqr(victor)*victor; } else if (n==16) { victor=sqr(sqr(sqr(sqr(victor)))); } else if (n==17) { victor=sqr(sqr(sqr(sqr(victor))))*victor; } else { victor=victor^n; } if (n==11) { bravo=sqr(sqr(sqr(bravo)))*sqr(bravo)*bravo; } else if (n==13) { bravo=sqr(sqr(sqr(bravo)))*sqr(sqr(bravo))*bravo; } else if (n==15) { bravo=sqr(sqr(sqr(bravo)))*sqr(sqr(bravo))*sqr(bravo)*bravo; } else if (n==16) { bravo=sqr(sqr(sqr(sqr(bravo)))); } else if (n==17) { bravo=sqr(sqr(sqr(sqr(bravo))))*bravo; } else { bravo=bravo^n; } nx=part_r(victor); ny=part_i(victor)*part_r(bravo)*r3; nz=part_i(victor)*part_i(bravo)*r3; } else { r1=sqrt(sqr(sy)+sqr(sz)); victor=complex(sx,r1); bravo=complex(sy,sz); if (n==11) { r3=sqr(sqr(sqr(r1)))*sqr(r1)*r1; } else if (n==13) { r3=sqr(sqr(sqr(r1)))*sqr(sqr(r1))*r1; } else if (n==15) { r3=sqr(sqr(sqr(r1)))*sqr(sqr(r1))*sqr(r1)*r1; } else if (n==16) { r3=sqr(sqr(sqr(sqr(r1)))); } else if (n==17) { r3=sqr(sqr(sqr(sqr(r1))))*r1; } else { r3=r1^n; } r3=r3^(-1); if (n==11) { victor=sqr(sqr(sqr(victor)))*sqr(victor)*victor; } else if (n==13) { victor=sqr(sqr(sqr(victor)))*sqr(sqr(victor))*victor; } else if (n==15) { victor=sqr(sqr(sqr(victor)))*sqr(sqr(victor))*sqr(victor)*victor; } else if (n==16) { victor=sqr(sqr(sqr(sqr(victor)))); } else if (n==17) { victor=sqr(sqr(sqr(sqr(victor))))*victor; } else { victor=victor^n; } if (n==11) { bravo=sqr(sqr(sqr(bravo)))*sqr(bravo)*bravo; } else if (n==13) { bravo=sqr(sqr(sqr(bravo)))*sqr(sqr(bravo))*bravo; } else if (n==15) { bravo=sqr(sqr(sqr(bravo)))*sqr(sqr(bravo))*sqr(bravo)*bravo; } else if (n==16) { bravo=sqr(sqr(sqr(sqr(bravo)))); } else if (n==17) { bravo=sqr(sqr(sqr(sqr(bravo))))*bravo; } else { bravo=bravo^n; } if (real(bravo)>check) { bravo=bravo-fold; } else if (real(bravo)<0-check) { bravo = complex(-real(bravo)-fold,imag(bravo)); } if (imag(bravo)>check) { bravo=complex(real(bravo),imag(bravo)-fold); } else if (imag(bravo)<0-check) { bravo = complex(real(bravo),-imag(bravo)-fold); } if (real(victor)>check) { victor=victor-fold; } else if (real(victor)<0-check) { victor = complex(-real(victor)-fold,imag(victor)); } if (sumode) { if (imag(victor)>check) { victor=complex(real(victor),imag(victor)-fold); } else if (imag(victor)<0-check) { victor = complex(real(victor),-imag(victor)-fold); } } r=cabs(bravo)+cabs(victor); if (r check) { sx = fold - sx; } else if (sx<(0-check)) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<(0-check)) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<(0-check)) { sz = 0-fold - sz; } /*fold sphere onto itself */ r = (sqr(sx)+sqr(sy)+sqr(sz)); if (r < sqr(minRadius)) { t1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*t1; sy=sy*t1; sz=sz*t1; } else if (r < sqr(fixedRadius)) { t2=(sqr(fixedRadius)/(r)); sx=sx*t2; sy=sy*t2; sz=sz*t2; } r2=(sqr(sx)+sqr(sy)+sqr(sz))^(n/2); theta=atan2(sx+flip(sqrt(sqr(sz)+sqr(sy)))); phi=atan2(sy+flip(sz)); if (sumode) { nx=-r2*cos(theta*v); ny=-r2*sin(v*theta)*cos(v*phi); nz=r2*sin(v*theta)*sin(v*phi); } else { nx=r2*cos(theta*v); ny=r2*sin(v*theta)*cos(v*phi); nz=r2*sin(v*theta)*sin(v*phi); } if (juliaMode) { sx=nx*scalef+cr; sy=ny*scalef+ci; sz=nz*scalef+cj; } else { sx=nx*scalef+(pixelr); sy=ny*scalef+abs(pixeli); sz=nz*scalef+(pixelj); } z=quaternion(sx,sy,sz,0); bail=abs(sx)+abs(sy)+abs(sz); } else if (fractaltype=="Amazing Hybrid I") { if (sx > check) { sx = fold - sx; } else if (sx<(0-check)) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<(0-check)) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<(0-check)) { sz = 0-fold - sz; } if (sy2 > check) { sy2 = fold - sy2; } else if (sy<(0-check)) { sy2 = 0-fold - sy2; } if (sz2 > check) { sz2 = fold - sz2; } else if (sz<(0-check)) { sz2 = 0-fold - sz2; } /*fold sphere onto itself */ r = (sqr(sx)+sqr(sy)+sqr(sz)+sqr(sy2)+sqr(sz2)); if (r < sqr(minRadius)) { t1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*t1; sy=sy*t1; sz=sz*t1; sy2=sy2*t1; sz2=sz2*t1; } else if (r < sqr(fixedRadius)) { t2=(sqr(fixedRadius)/(r)); sx=sx*t2; sy=sy*t2; sz=sz*t2; sy2=sy2*t2; sz2=sz2*t2; } if (r2mode) { if (rXmodeb) { r1=(sqr(sx)+sqr(sy)+sqr(sz))^(n/2); r2=(sqr(sx)+sqr(sy2)+sqr(sz2))^(n/2); } else { r2=(sqr(sx)+sqr(sy)+sqr(sz))^(n/2); r1=(sqr(sx)+sqr(sy2)+sqr(sz2))^(n/2); } } else { if (rXmodeb) { r2=(sqr(sx)+sqr(sy)+sqr(sz)+sqr(sy2)+sqr(sz2))^(n/2); } else { if (rXmodec) { r2=(sqr(sx)+sqr(sy2)+sqr(sz2))^(n/2); } else { r2=(sqr(sx)+sqr(sy)+sqr(sz))^(n/2); } } } theta=atan2(sx+flip(sy)); whiskey=atan2(sx+flip(sz)); tango=atan2(sx+flip(sqrt(sy2^2+sz2^2))); foxtrot=atan2(sy2+flip(sz2)); if (sumode) { if (r2mode) { if (absmode) { //sumode 2 nx=r2*cos(tango*v)*cos(theta*v)*cos(whiskey*v); } else { nx=r2*cos(tango*v); } ny=r1*sin(theta*v); nz=r1*sin(whiskey*v); ny2=r2*cos(foxtrot*v)*sin(tango*v); nz2=r2*sin(foxtrot*v)*sin(tango*v); } else { if (absmode) { //sumode 2 nx=r2*cos(tango*v)*cos(theta*v)*cos(whiskey*v); } else { nx=r2*cos(tango*v); } ny=r2*sin(theta*v); nz=r2*sin(whiskey*v); ny2=r2*cos(foxtrot*v)*sin(tango*v); nz2=r2*sin(foxtrot*v)*sin(tango*v); } } else { if (r2mode) { if (absmode) { //sumode 2 nx=r2*cos(tango*v)*cos(theta*v)*cos(whiskey*v); } else { nx=r2*cos(tango*v); } ny=r2*sin(theta*v); nz=r2*sin(whiskey*v); ny2=r1*cos(foxtrot*v); nz2=r1*sin(foxtrot*v); } else { if (absmode) { //sumode 2 nx=r2*cos(tango*v)*cos(theta*v)*cos(whiskey*v); } else { nx=r2*cos(tango*v); } ny=r2*sin(theta*v); nz=r2*sin(whiskey*v); ny2=r2*cos(foxtrot*v); nz2=r2*sin(foxtrot*v); } } if (juliaMode) { sx=nx+cr; sy=ny+ci; sz=nz+cj; sy2=ny2+ci; sz2=nz2+cj; } else { sx=nx+(pixelr); sy=ny+abs(pixeli); sz=nz+(pixelj); sy2=ny2+abs(pixeli); sz2=nz2+(pixelj); } bail=abs(sx)+abs(sy)+abs(sz); z=quaternion(sx,sy,sz,0); } else if (fractaltype=="Amazing Hybrid B4") { if (sx > check) { sx = fold - sx; } else if (sx<(0-check)) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<(0-check)) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<(0-check)) { sz = 0-fold - sz; } /*fold sphere onto itself */ r = (sqr(sx)+sqr(sy)+sqr(sz)); if (r < sqr(minRadius)) { t1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*t1; sy=sy*t1; sz=sz*t1; } else if (r < sqr(fixedRadius)) { t2=(sqr(fixedRadius)/(r)); sx=sx*t2; sy=sy*t2; sz=sz*t2; } r2=(sqr(sx)+sqr(sy)+sqr(sz))^(n/2); theta=atan2(sx+flip(sy)); tango=atan2(sx+flip(sz)); if ((sy+sz)<0) { whiskey=atan2(sx-flip(sqrt(sqr(sy)+sqr(sz)))); } else { whiskey=atan2(sx+flip(sqrt(sqr(sy)+sqr(sz)))); } nx=r2*cos(whiskey*v); ny=r2*sin(theta*v); nz=r2*sin(tango*v); if (juliaMode) { sx=nx*scalef+cr; sy=ny*scalef+ci; sz=nz*scalef+cj; } else { sx=nx*scalef+(pixelr); sy=ny*scalef+(pixeli); sz=nz*scalef+(pixelj); } z=quaternion (sx,sy,sz,0); bail=abs(sx)+abs(sy)+abs(sz); } else if (fractaltype=="Amazing Hybrid C2") { if (sx > check) { sx = fold - sx; } else if (sx<(0-check)) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<(0-check)) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<(0-check)) { sz = 0-fold - sz; } if (sx2 > check) { sx2 = fold - sx2; } else if (sx2<(0-check)) { sx2 = 0-fold - sx2; } if (sy2 > check) { sy2 = fold - sy2; } else if (sy2<(0-check)) { sy2 = 0-fold - sy2; } if (sz2 > check) { sz2 = fold - sz2; } else if (sz2<(0-check)) { sz2 = 0-fold - sz2; } /*fold sphere onto itself */ r = (sqr(sx)+sqr(sy)+sqr(sz)+sqr(sx2)+sqr(sy2)+sqr(sz2)); if (r < sqr(minRadius)) { t1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*t1; sy=sy*t1; sz=sz*t1; sx2=sx2*t1; sy2=sy2*t1; sz2=sz2*t1; } else if (r < sqr(fixedRadius)) { t2=(sqr(fixedRadius)/(r)); sx=sx*t2; sy=sy*t2; sz=sz*t2; sx2=sx2*t2; sy2=sy2*t2; sz2=sz2*t2; } r2=(sqr(sx2)+sqr(sx)+sqr(sy2)+sqr(sy)+sqr(sz2)+sqr(sz))^(n/2); theta=atan2(sx+flip(sy)); tango=atan2(sx2+flip(sz)); whiskey=atan2(sy2+flip(sz2)); nx=r2*cos(theta*v); nx2=r2*cos(tango*v); ny=r2*sin(theta*v); ny2=r2*cos(whiskey*v); nz=r2*sin(tango*v); nz2=r2*sin(whiskey*v); if (juliaMode) { sx=nx*scalef+cr; sy=ny*scalef+abs(ci); sz=nz*scalef+cj; sx2=nx2*scalef+cr; sy2=ny2*scalef+abs(ci); sz2=nz2*scalef+cj; } else { if (absmode) { sx=nx*scalef+pixelr; sy=ny*scalef+(pixeli); sz=nz*scalef+pixelj; sx2=nx2*scalef+pixelr; sy2=ny2*scalef+(pixeli); sz2=nz2*scalef+pixelj; } else { sx=nx*scalef+pixelr; sy=ny*scalef+abs(pixeli); sz=nz*scalef+pixelj; sx2=nx2*scalef+pixelr; sy2=ny2*scalef+abs(pixeli); sz2=nz2*scalef+pixelj; } } if (bailcontrol) { bail=abs(sx)+abs(sy)+abs(sz); } else { bail=abs(sx)+abs(sy)+abs(sz)+abs(sx2)+abs(sy2)+abs(sz2); } z=quaternion(sx,sy,sz,sx2); } else if (fractaltype=="Type B2 Hybrid") { /* fold box onto itself */ if (sx > check) { sx = fold - sx; } else if (sx<(0-check)) { sx = 0-fold - sx; } if (sx2 > check) { sx2 = fold - sx2; } else if (sx2<(0-check)) { sx2 = 0-fold - sx2; } if (sy > check) { sy = fold - sy; } else if (sy<(0-check)) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<(0-check)) { sz = 0-fold - sz; } /*fold sphere onto itself */ r = (sqr(sx2)+sqr(sx)+sqr(sy)+sqr(sz)); if (r < sqr(minRadius)) { r1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*r1; sx2=sx2*r1; sy=sy*r1; sz=sz*r1; } else if (r < sqr(fixedRadius)) { r1=(sqr(fixedRadius)/(r)); sx=sx*r1; sx2=sx2*r1; sy=sy*r1; sz=sz*r1; } r2=(sqr(sx)+sqr(sx2)+sqr(sy)+sqr(sz))^(n/2); theta=atan2(sx+flip(sy)); tango=atan2(sx2+flip(sz)); if (juliaMode) { sx=r2*cos(theta*v)*scalef+cr; sx2=r2*cos(tango*v)*scalef+cr; sy=r2*sin(theta*v)*scalef+ci; sz=r2*sin(tango*v)*scalef+cj; } else { sx=r2*cos(theta*v)*scalef+(pixelr); sx2=r2*cos(tango*v)*scalef+(pixelr); sy=r2*sin(theta*v)*scalef+abs(pixeli); sz=r2*sin(tango*v)*scalef+abs(pixelj); } if (bailcontrol) { bail=abs(sx)+abs(sy)+abs(sz); } else { bail=sqr(sx)+sqr(sy)+sqr(sz)+abs(sx2); } z=quaternion(sx,sy,sz,sx2); } else if (fractaltype=="Type B3d Hybrid") { /* fold box onto itself */ if (sx > check) { sx = fold - sx; } else if (sx<(0-check)) { sx = 0-fold - sx; } if (sx2 > check) { sx2 = fold - sx2; } else if (sx2<(0-check)) { sx2 = 0-fold - sx2; } if (sy > check) { sy = fold - sy; } else if (sy<(0-check)) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<(0-check)) { sz = 0-fold - sz; } /*fold sphere onto itself */ r = (sqr(sx2)+sqr(sx)+sqr(sy)+sqr(sz)); if (r < sqr(minRadius)) { r1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*r1; sx2=sx2*r1; sy=sy*r1; sz=sz*r1; } else if (r < sqr(fixedRadius)) { r1=(sqr(fixedRadius)/(r)); sx=sx*r1; sx2=sx2*r1; sy=sy*r1; sz=sz*r1; } r2=(sqr(sx)+sqr(sy)+sqr(sz))^(n/2); r3=(sqr(sx2)+sqr(sy)+sqr(sz))^(n/2); theta=atan2(sx+flip(sy)); tango=atan2(sx2+flip(sz)); if (stringymode) { if (pixelr>0) { nx=-r2*cos(theta*v); } else { nx=-r2*cos(theta*v); } if (pixelr>0) { nx2=-r3*cos(tango*v); } else { nx2=-r3*cos(tango*v); } ny=-r2*sin(theta*v); nz=-r3*sin(tango*v); } else { if (pixelr>0) { nx=r3*cos(theta*v); } else { nx=r2*cos(theta*v); } if (pixelr>0) { nx2=r2*cos(tango*v); } else { nx2=r3*cos(tango*v); } ny=r2*sin(theta*v); nz=r3*sin(tango*v); } if (juliaMode) { sx=nx*scalef+cr; sx2=nx2*scalef+cr; sy=ny*scalef+ci; sz=nz*scalef+cj; } else { if (absmode) { sx=nx*scalef+abs(pixelr); sx2=nx2*scalef+abs(pixelr); } else { sx=nx*scalef+(pixelr); sx2=nx2*scalef+(pixelr); } sy=ny*scalef+abs(pixeli); sz=nz*scalef+abs(pixelj); } if (bailcontrol) { bail=abs(sx)+abs(sy)+abs(sz); } else { bail=sqr(sx)+sqr(sy)+sqr(sz)+abs(sx2); } z=quaternion(sx,sy,sz,sx2); } else if (fractaltype=="Amazing Hybrid G") { if (sx > check) { sx = fold - sx; } else if (sx<(0-check)) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<(0-check)) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<(0-check)) { sz = 0-fold - sz; } /*fold sphere onto itself */ r = (sqr(sx)+sqr(sy)+sqr(sz)); if (r < sqr(minRadius)) { t1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*t1; sy=sy*t1; sz=sz*t1; } else if (r < sqr(fixedRadius)) { t2=(sqr(fixedRadius)/(r)); sx=sx*t2; sy=sy*t2; sz=sz*t2; } r=sqrt(sqr(sx)+sqr(sy)+sqr(sz)); r2=r^n; if (sumode) { theta=atan2(sx*checkvar+flip(r)); phi=atan2(sy*checkvar+flip(r)); tango=atan2(sz*checkvar+flip(r)); } else { theta=atan2(abs(sx)*checkvar+flip(r)); phi=atan2(abs(sy)*checkvar+flip(r)); tango=atan2(abs(sz)*checkvar+flip(r)); } if (stringymode) { nx=r2*sin(theta*v); ny=r2*sin(phi*v); nz=r2*sin(tango*v); } else { nx=r2*cos(theta*v); ny=r2*cos(phi*v); nz=r2*cos(tango*v); } if (juliaMode) { sx=nx*scalef+cr; sy=ny*scalef+ci; sz=nz*scalef+cj; } else { sx=nx*scalef+pixelr; sy=ny*scalef+pixeli; sz=nz*scalef+pixelj; } z=quaternion(sx,sy,sz,0); bail=sqr(sx)+sqr(sy)+sqr(sz); } if (fractaltype=="Amazing Hybrid G 4d") { if (sx > check) { sx = fold - sx; } else if (sx<(0-check)) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<(0-check)) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<(0-check)) { sz = 0-fold - sz; } if (sk > check) { sk = fold - sk; } else if (sk<(0-check)) { sk = 0-fold - sk; } /*fold sphere onto itself */ r = (sqr(sx)+sqr(sy)+sqr(sz)+sqr(sk)); if (r < sqr(minRadius)) { t1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*t1; sy=sy*t1; sz=sz*t1; sk=sk*t1; } else if (r < sqr(fixedRadius)) { t2=(sqr(fixedRadius)/(r)); sx=sx*t2; sy=sy*t2; sz=sz*t2; sk=sk*t2; } r = (sqr(sx)+sqr(sy)+sqr(sz)+sqr(sk)); r2=r^n; if (absmode) { theta=atan2(abs(sx)*checkvar+flip(r)); phi=atan2(abs(sy)*checkvar+flip(r)); tango=atan2(abs(sz)*checkvar+flip(r)); whiskey=atan2(abs(sk)*checkvar+flip(r)); } else { theta=atan2(sx*checkvar+flip(r)); phi=atan2(sy*checkvar+flip(r)); tango=atan2(sz*checkvar+flip(r)); whiskey=atan2(sk*checkvar+flip(r)); } if (stringymode) { nx=r2*sin(theta*v); ny=r2*sin(phi*v); nz=r2*sin(tango*v); nk=r2*sin(whiskey*v); } else { nx=r2*cos(theta*v); ny=r2*cos(phi*v); nz=r2*cos(tango*v); nk=r2*cos(whiskey*v); } if (juliaMode) { sx=nx*scalef+cr; sy=ny*scalef+ci; sz=nz*scalef+cj; sk=nk*scalef+ck; } else { sx=nx*scalef+pixelr; sy=ny*scalef+pixeli; sz=nz*scalef+pixelj; sk=nk*scalef+pixelk; } z=quaternion(sx,sy,sz,sk); bail=sqr(sx)+sqr(sy)+sqr(sz); } else if (fractaltype=="Amazing Hybrid F") { if (sx > check) { sx = fold - sx; } else if (sx<(0-check)) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<(0-check)) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<(0-check)) { sz = 0-fold - sz; } /*fold sphere onto itself */ r = (sx^2+sy^2+sz^2); if (r < sqr(minRadius)) { t1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*t1; sy=sy*t1; sz=sz*t1; } else if (r < sqr(fixedRadius)) { t2=(sqr(fixedRadius)/(r)); sx=sx*t2; sy=sy*t2; sz=sz*t2; } r=sqrt(.5*(sqr(sx)+sqr(sy)+sqr(sz))); r2=r^n; if (absmode) { theta=atan2(abs(sx)*scheck+flip(r)); phi=atan2(abs(sy)*scheck+flip(r)); tango=atan2(abs(sz)*scheck+flip(r)); } else { theta=atan2(sx*scheck+flip(r)); phi=atan2(sy*scheck+flip(r)); tango=atan2(sz*scheck+flip(r)); } nx=r2*cos(theta*v); ny=r2*cos(phi*v); nz=r2*cos(tango*v); if (juliaMode) { sx=nx*scalef+cr; sy=ny*scalef+ci; sz=nz*scalef+cj; } else { sx=nx*scalef+pixelr; sy=ny*scalef+pixeli; sz=nz*scalef+pixelj; } z=quaternion(sx,sy,sz,0); bail=sqr(sx)+sqr(sy)+sqr(sz); } else if (fractaltype=="Mandelbox") { /* fold box onto itself */ if (sx > check) { sx = fold - sx; } else if (sx<(0-check)) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<(0-check)) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<(0-check)) { sz = 0-fold - sz; } /*fold sphere onto itself */ r = (sx^2+sy^2+sz^2); if (r < sqr(minRadius)) { t1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*t1; sy=sy*t1; sz=sz*t1; } else if (r < sqr(fixedRadius)) { t2=(sqr(fixedRadius)/(r)); sx=sx*t2; sy=sy*t2; sz=sz*t2; } if (juliaMode) { sx=sx*scalef+cr; sy=sy*scalef+ci; sz=sz*scalef+cj; } else { sx=sx*scalef+pixelr; sy=sy*scalef+pixeli; sz=sz*scalef+pixelj; } z=quaternion(sx,sy,sz,0); bail=abs(sx)+abs(sy)+abs(sz); } else if (fractaltype=="Mandelbox 2") { /* fold box onto itself */ if (sx > check) { sx = fold - sx; } else if (sx<(0-check)) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<(0-check)) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<(0-check)) { sz = 0-fold - sz; } // fold mags vs stuff if ((sy+sz)<0) { r=0- sqrt(sqr(sy)+sqr(sz)); if (r < (0- check)) { ny=0-fold-(sqr(sy)-sqr(sz)); nz=0-fold-(2*sy*sz); } } else { r=sqrt(sqr(sy)+sqr(sz)); if ( r > check) { ny= fold - (sqr(sy)-sqr(sz)); nz= fold - (2*sy*sz); } } if ((sx+sy)<0) { r=0- sqrt(sqr(sx)+sqr(sy)); if (r < (0- check)) { nx=0-fold-(sqr(sx)-sqr(sy)); } } else { r=sqrt(sqr(sx)+sqr(sy)); if ( r > check) { nx= fold - (sqr(sx)-sqr(sy)); } } sx=nx; sy=ny; sz=nz; /*fold sphere onto itself */ r = (sx^2+sy^2+sz^2); if (r < sqr(minRadius)) { t1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*t1; sy=sy*t1; sz=sz*t1; } else if (r < sqr(fixedRadius)) { t2=(sqr(fixedRadius)/(r)); sx=sx*t2; sy=sy*t2; sz=sz*t2; } if (juliaMode) { sx=sx*scalef+cr; sy=sy*scalef+ci; sz=sz*scalef+cj; } else { sx=sx*scalef+pixelr; sy=sy*scalef+pixeli; sz=sz*scalef+pixelj; } z=quaternion(sx,sy,sz,0); bail=abs(sx)+abs(sy)+abs(sz); } else if (fractaltype=="Amazing Hybrid D 4d") { if (sx > check) { sx = fold - sx; } else if (sx<0-check) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<0-check) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<0-check) { sz = 0-fold - sz; } if (sk > check) { sk = fold - sk; } else if (sk<(0-check)) { sk = 0-fold - sk; } /*fold sphere onto itself */ if (mistake) { r = (sqr(sx)+sqr(sy)+sqr(sz)); } else { r = (sqr(sx)+sqr(sy)+sqr(sz)+sqr(sk)); } if (r < sqr(minRadius)) { r1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*r1; sy=sy*r1; sz=sz*r1; sk=sk*r1; } else if (r < sqr(fixedRadius)) { r1=(sqr(fixedRadius)/(r)); sx=sx*r1; sy=sy*r1; sz=sz*r1; sk=sk*r1; } if (lt==1 && pt==1) { if (stringymode) { if (absmode) { theta=atan2(abs(sx)*scheck+flip(sqrt((sqr(sz)+sqr(sy)+sqr(sk))))); phi=atan2(abs(sy)*scheck+flip(sqrt((sqr(sx)+sqr(sz)+sqr(sk))))); tango=atan2(abs(sz)*scheck+flip(sqrt ((sqr(sx)+sqr(sy)+sqr(sk))))); whiskey=atan2(abs(sk)*scheck+flip(sqrt ((sqr(sx)+sqr(sy)+sqr(sz))))); r2=(sqr(sx)+sqr(sy)+sqr(sz)+sqr(sk))^(n/2); sx=r2*sin(v*theta); sy=r2*sin(v*phi); sz=r2*sin(tango*mag); sk=r2*sin(whiskey*mag); } else { theta=atan2(sx*scheck+flip(sqrt((sqr(sz)+sqr(sy)+sqr(sk))))); phi=atan2(sy*scheck+flip(sqrt((sqr(sx)+sqr(sz)+sqr(sk))))); tango=atan2(sz*scheck+flip(sqrt ((sqr(sx)+sqr(sy)+sqr(sk))))); whiskey=atan2(sk*scheck+flip(sqrt ((sqr(sx)+sqr(sy)+sqr(sz))))); r2=(sqr(sx)+sqr(sy)+sqr(sz)+sqr(sk))^(n/2); sx=r2*sin(v*theta); sy=r2*sin(v*phi); sz=r2*sin(tango*mag); sk=r2*sin(whiskey*mag); } } else { if (absmode) { theta=atan2(abs(sx)*scheck+flip(sqrt((sqr(sz)+sqr(sy)+sqr(sk))))); phi=atan2(abs(sy)*scheck+flip(sqrt((sqr(sx)+sqr(sz)+sqr(sk))))); tango=atan2(abs(sz)*scheck+flip(sqrt ((sqr(sx)+sqr(sy)+sqr(sk))))); whiskey=atan2(abs(sk)*scheck+flip(sqrt ((sqr(sx)+sqr(sy)+sqr(sz))))); } else { theta=atan2(sx*scheck+flip(sqrt((sqr(sz)+sqr(sy)+sqr(sk))))); phi=atan2(sy*scheck+flip(sqrt((sqr(sx)+sqr(sz)+sqr(sk))))); tango=atan2(sz*scheck+flip(sqrt ((sqr(sx)+sqr(sy)+sqr(sk))))); whiskey=atan2(sk*scheck+flip(sqrt ((sqr(sx)+sqr(sy)+sqr(sz))))); } r2=(sqr(sx)+sqr(sy)+sqr(sz)+sqr(sk))^(n/2); r2=(sx^2+sy^2+sz^2)^(n/2); sx=r2*cos(v*theta); sy=r2*cos(v*phi); sz=r2*cos(tango*mag); sk=r2*cos(whiskey*mag); } } else { if (stringymode) { if (absmode) { theta=atan2(abs(sx)^lt*scheck+flip((sqr(sz)+sqr(sy)+sqr(sk))^(pt/2))); phi=atan2(abs(sy)^lt*scheck+flip((sqr(sx)+sqr(sz)+sqr(sk))^(pt/2))); tango=atan2(abs(sz)^lt*scheck+flip((sqr(sx)+sqr(sy)+sqr(sk))^(pt/2))); whiskey=atan2(abs(sk)^lt*scheck+flip((sqr(sx)+sqr(sy)+sqr(sz))^(pt/2))); } else { theta=atan2(sx^lt*scheck+flip((sqr(sz)+sqr(sy)+sqr(sk))^(pt/2))); phi=atan2(sy^lt*scheck+flip((sqr(sx)+sqr(sz)+sqr(sk))^(pt/2))); tango=atan2(sz^lt*scheck+flip((sqr(sx)+sqr(sy)+sqr(sk))^(pt/2))); whiskey=atan2(sk^lt*scheck+flip((sqr(sx)+sqr(sy)+sqr(sz))^(pt/2))); } r2=(sqr(sx)+sqr(sy)+sqr(sz)+sqr(sk))^(n/2); sx=r2*sin(v*theta); sy=r2*sin(v*phi); sz=r2*sin(tango*mag); sk=r2*sin(whiskey*mag); } else { if (absmode) { theta=atan2(abs(sx)^lt*scheck+flip((sqr(sz)+sqr(sy)+sqr(sk))^(pt/2))); phi=atan2(abs(sy)^lt*scheck+flip((sqr(sx)+sqr(sz)+sqr(sk))^(pt/2))); tango=atan2(abs(sz)^lt*scheck+flip((sqr(sx)+sqr(sy)+sqr(sk))^(pt/2))); whiskey=atan2(abs(sk)^lt*scheck+flip((sqr(sx)+sqr(sy)+sqr(sz))^(pt/2))); } else { theta=atan2(sx^lt*scheck+flip((sqr(sz)+sqr(sy)+sqr(sk))^(pt/2))); phi=atan2(sy^lt*scheck+flip((sqr(sx)+sqr(sz)+sqr(sk))^(pt/2))); tango=atan2(sz^lt*scheck+flip((sqr(sx)+sqr(sy)+sqr(sk))^(pt/2))); whiskey=atan2(sk^lt*scheck+flip((sqr(sx)+sqr(sy)+sqr(sz))^(pt/2))); } r2=(sqr(sx)+sqr(sy)+sqr(sz)+sqr(sk))^(n/2); sx=r2*cos(v*theta); sy=r2*cos(v*phi); sz=r2*cos(tango*mag); sk=r2*cos(whiskey*mag); } } if (juliaMode) { sx=sx*scalef+cr; sy=sy*scalef+ci; sz=sz*scalef+cj; sk=sk*scalef+ck; } else { sx=sx*scalef+pixelr; sy=sy*scalef+pixeli; sz=sz*scalef+pixelj; sk=sk*scalef+pixelk; } if (bailcontrol) { bail=abs(sx)^bail2+abs(sy)^bail2+abs(sz)^bail2+abs(sk)^bail2; } else { bail=abs(sx)+abs(sy)+abs(sz)+abs(sk); } z=quaternion(sx,sy,sz,sk); } else if (fractaltype=="Mandelbox 4d") { /* fold box onto itself */ if (sx > check) { sx = fold - sx; } else if (sx<(0-check)) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<(0-check)) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<(0-check)) { sz = 0-fold - sz; } if (sk > check) { sk = fold - sk; } else if (sk<(0-check)) { sk = 0-fold - sk; } /*fold sphere onto itself */ r = (sx^2+sy^2+sz^2); if (r < sqr(minRadius)) { r1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*r1; sy=sy*r1; sz=sz*r1; sk=sk*r1; } else if (r < sqr(fixedRadius)) { r1=(sqr(fixedRadius)/(r)); sx=sx*r1; sy=sy*r1; sz=sz*r1; sk=sk*r1; } if (juliaMode) { sx=sx*scalef+cr; sy=sy*scalef+ci; sz=sz*scalef+cj; sk=sk*scalef+ck; } else { sx=sx*scalef+pixelr; sy=sy*scalef+pixeli; sz=sz*scalef+pixelj; sk=sk*scalef+pixelk; } z=quaternion(sx,sy,sz,sk); bail=abs(sx)+abs(sy)+abs(sz)+abs(sk); } else if (fractaltype=="Type B Hybrid 4d") { /* fold box onto itself */ if (sx > check) { sx = fold - sx; } else if (sx<0-check) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<0-check) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<0-check) { sz = 0-fold - sz; } if (sk > check) { sk = fold - sk; } else if (sk<(0-check)) { sk = 0-fold - sk; } /*fold sphere onto itself */ r = (sqr(sx)+sqr(sy)+sqr(sz)+sqr(sk)); if (r < sqr(minRadius)) { r1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*r1; sy=sy*r1; sz=sz*r1; sk=sk*r1; } else if (r < sqr(fixedRadius)) { r1=(sqr(fixedRadius)/(r)); sx=sx*r1; sy=sy*r1; sz=sz*r1; sk=sk*r1; } r2=(sqr(sx)+sqr(sy)+sqr(sz)+sqr(sk))^(n/2); theta=atan2(sx^pt+flip(sy^lt)); tango=atan2(sx^pt+flip(sz^lt)); whiskey=atan2(sx^pt+flip(sk^lt)); if (juliaMode) { sx=r2*cos(theta*mag)*scalef+cr; sy=r2*sin(theta*v)*scalef+ci; sz=r2*sin(tango*v)*scalef+cj; sk=r2*sin(whiskey*v)*scalef+ck; } else { sx=r2*cos(theta*mag)*scalef+pixelr; sy=r2*sin(theta*v)*scalef+pixeli; sz=r2*sin(tango*v)*scalef+pixelj; sk=r2*sin(whiskey*v)*scalef+pixelk; } if (bailcontrol) { bail=abs(sx)^bail2+abs(sy)^bail2+abs(sz)^bail2+abs(sk)^bail2; } else { bail=abs(sx)+abs(sy)+abs(sz)+abs(sk); } z=quaternion(sx,sy,sz,sk); } else if (fractaltype=="Type B Hybrid") { /* fold box onto itself */ if (sx > check) { sx = fold - sx; } else if (sx<(0-check)) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<(0-check)) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<(0-check)) { sz = 0-fold - sz; } /*fold sphere onto itself */ r = (sx^2+sy^2+sz^2); if (r < sqr(minRadius)) { r1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*r1; sy=sy*r1; sz=sz*r1; } else if (r < sqr(fixedRadius)) { r1=(sqr(fixedRadius)/(r)); sx=sx*r1; sy=sy*r1; sz=sz*r1; } r2=(sx^2+sy^2+sz^2)^(n/2); theta=atan2(sx^pt+flip(sy^lt)); tango=atan2(sx^pt+flip(sz^lt)); if (juliaMode) { sx=r2*cos(theta*mag)*scalef+cr; sy=r2*sin(theta*v)*scalef+ci; sz=r2*sin(tango*v)*scalef+cj; } else { sx=r2*cos(theta*mag)*scalef+pixelr; sy=r2*sin(theta*v)*scalef+pixeli; sz=r2*sin(tango*v)*scalef+pixelj; } if (bailcontrol) { bail=abs(sx)^bail2+abs(sy)^bail2+abs(sz)^bail2; } else { bail=sqr(sx)+sqr(sy)+sqr(sz); } z=quaternion(sx,sy,sz,0); } else if (fractaltype=="Amazing Hybrid Bulb1") { if (sx > check) { sx = fold - sx; } else if (sx<0-check) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<0-check) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<0-check) { sz = 0-fold - sz; } /*fold sphere onto itself */ r = (sx^2+sy^2+sz^2); if (r < sqr(minRadius)) { r1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*r1; sy=sy*r1; sz=sz*r1; } else if (r < fixedRadius) { r1=(sqr(fixedRadius)/r); sx=sx*r1; sy=sy*r1; sz=sz*r1; } theta=atan2(sz+flip(sqrt(sqr(sx)+sqr(sy)))); phi=atan2(sy+flip(sx)); r2=(sx^2+sy^2+sz^2)^(n/2); sx=r2*sin(mag*theta)*sin(v*phi); sy=r2*sin(theta*mag)*cos(v*phi); sz=r2*cos(theta*mag); if (juliaMode) { sx=sx*scalef+cr; sy=sy*scalef+ci; sz=sz*scalef+cj; } else { sx=sx*scalef+pixelr; sy=sy*scalef+pixeli; sz=sz*scalef+pixelj; } if (bailcontrol) { bail=abs(sx)^bail2+abs(sy)^bail2+abs(sz)^bail2; } else { bail=sqr(sx)+sqr(sy)+sqr(sz); } z=quaternion(sx,sy,sz,0); } else if (fractaltype=="Amazing Hybrid Bulb2") { if (sx > check) { sx = fold - sx; } else if (sx<0-check) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<0-check) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<0-check) { sz = 0-fold - sz; } /*fold sphere onto itself */ r = (sx^2+sy^2+sz^2); if (r < sqr(minRadius)) { r1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*r1; sy=sy*r1; sz=sz*r1; } else if (r < fixedRadius) { r1=(sqr(fixedRadius)/r); sx=sx*r1; sy=sy*r1; sz=sz*r1; } theta=atan2(sz+flip(sqrt(sqr(sx)+sqr(sy)))); phi=atan2(sy+flip(sx)); r2=(sx^2+sy^2+sz^2)^(n/2); sx=r2*cos(mag*theta)*sin(v*phi); sy=r2*cos(theta*mag)*cos(v*phi); sz=r2*sin(theta*mag); if (juliaMode) { sx=sx*scalef+cr; sy=sy*scalef+ci; sz=sz*scalef+cj; } else { sx=sx*scalef+pixelr; sy=sy*scalef+pixeli; sz=sz*scalef+pixelj; } if (bailcontrol) { bail=abs(sx)^bail2+abs(sy)^bail2+abs(sz)^bail2; } else { bail=sqr(sx)+sqr(sy)+sqr(sz); } z=quaternion(sx,sy,sz,0); } else if (fractaltype=="Amazing Hybrid D") { if (sx > check) { sx = fold - sx; } else if (sx<0-check) { sx = 0-fold - sx; } if (sy > check) { sy = fold - sy; } else if (sy<0-check) { sy = 0-fold - sy; } if (sz > check) { sz = fold - sz; } else if (sz<0-check) { sz = 0-fold - sz; } /*fold sphere onto itself */ r = (sx^2+sy^2+sz^2); if (r < sqr(minRadius)) { r1=(sqr(fixedRadius)/sqr(minRadius)); sx=sx*r1; sy=sy*r1; sz=sz*r1; } else if (r < fixedRadius) { r1=(sqr(fixedRadius)/r); sx=sx*r1; sy=sy*r1; sz=sz*r1; } if (stringymode) { if (absmode) { theta=atan2(abs(sx)*scheck+flip(sqrt((sqr(sz)+sqr(sy))))); phi=atan2(abs(sy)*scheck+flip(sqrt((sqr(sx)+sqr(sz))))); tango=atan2(abs(sz)*scheck+flip(sqrt ((sqr(sx)+sqr(sy))))); } else { theta=atan2(sx*scheck+flip(sqrt((sqr(sz)+sqr(sy))))); phi=atan2(sy*scheck+flip(sqrt((sqr(sx)+sqr(sz))))); tango=atan2(sz*scheck+flip(sqrt ((sqr(sx)+sqr(sy))))); } r2=(sx^2+sy^2+sz^2)^(n/2); sx=r2*sin(v*theta); sy=r2*sin(v*phi); sz=r2*sin(tango*mag); } else { if (absmode) { theta=atan2(abs(sx)*scheck+flip(sqrt((sqr(sz)+sqr(sy))))); phi=atan2(abs(sy)*scheck+flip(sqrt((sqr(sx)+sqr(sz))))); tango=atan2(abs(sz)*scheck+flip(sqrt ((sqr(sx)+sqr(sy))))); } else { theta=atan2(sx*scheck+flip(sqrt((sqr(sz)+sqr(sy))))); phi=atan2(sy*scheck+flip(sqrt((sqr(sx)+sqr(sz))))); tango=atan2(sz*scheck+flip(sqrt ((sqr(sx)+sqr(sy))))); } r2=(sx^2+sy^2+sz^2)^(n/2); sx=r2*cos(v*theta); sy=r2*cos(v*phi); sz=r2*cos(tango*mag); } if (juliaMode) { sx=sx*scalef+cr; sy=sy*scalef+ci; sz=sz*scalef+cj; } else { sx=sx*scalef+pixelr; sy=sy*scalef+pixeli; sz=sz*scalef+pixelj; } if (bailcontrol) { bail=abs(sx)^bail2+abs(sy)^bail2+abs(sz)^bail2; } else { bail=sqr(sx)+sqr(sy)+sqr(sz); } z=quaternion(sx,sy,sz,0); } } bool bailout(void) { return(bail