From: "Morgan L. Owens" Sent: Thursday, May 23, 2002 3:19 PM
At 00:19 24/05/2002, Morgan L. Owens wrote:
4movable{
Oh, that's right; the current (developer) version has 5 user pars.
[Big intricate formula snipped...] Not feeling capable to code something which will evoke headlines like "script for freeware fractal software beats Mathematica - Wolfram says he's stunned" I approached the problem from the other side: Provide the circles' radii and let the formula put them where they belong. The first two circles (with radii r1, r2) can be put on the x-axis at -r1 and r2, so they touch at the origin. Calculating where the center of circle 3 should be to touch both 1 and 2 is pretty straightforward. Using only the solution for positive y one then repeats the procedure for circle 4 with a solution for negative y. Then things get complicated, so one better stops... ;-) This way one has only access to small subset of cases your formula provides (and only 4 circles at that!), but with each circle having contact with at least 2 others hopefully interesting ones... ...and while playing around with these modifications I suddenly had the idea of adding an "inverted" circle, a circle where inside=1 when the point is outside - whith truly interesting results (pars and formulas at the bottom of this mail). Regards, Gerald P.S.: I know this is not exactly small for one's average email, but I promise to restrain myself in the future. :-) ;-------------------- Pars following -------------------------- Inv4Klein_Group_1 {; ; reset=2002 type=formula formulafile=fmlpost.frm formulaname=Inv4Klein_Group corners=-10.90761/10.90761/-8.180707/8.180707 params=0.86602540378444/1.86602540378444 float=y periodicity=0 colors=@chroma.map } Inv4Klein_Group_2 {; ; reset=2002 type=formula formulafile=fmlpost.frm formulaname=Inv4Klein_Group center-mag=-4.44089e-015/3.10862e-015/0.5722363 params=0.86602540378444/0.87 float=y periodicity=0 colors=@chroma.map } Inv4Klein_Group_3 {; ; reset=2002 type=formula formulafile=fmlpost.frm formulaname=Inv4Klein_Group center-mag=-5.32907e-015/7.10543e-015/0.08343137 params=1/2 float=y periodicity=0 colors=@chroma.map } Inv4Klein_Group_4 {; ; reset=2002 type=formula formulafile=fmlpost.frm formulaname=Inv4Klein_Group center-mag=-1.3047/-7.10543e-015/0.07093161 params=1/2.25 float=y maxiter=256 outside=atan periodicity=0 colors=@chroma.map } Inv4Klein_Group_5 {; ; reset=2002 type=formula formulafile=fmlpost.frm formulaname=Inv4Klein_Group center-mag=-1.3047/-3.64153e-014/0.1069102 params=0.9/1.8 float=y maxiter=256 periodicity=0 colors=@chroma.map } Inv4Klein_Group_6 {; ; reset=2002 type=formula formulafile=fmlpost.frm formulaname=Inv4Klein_Group center-mag=-1.3047/-1.42109e-014/0.03353532 params=0.99/1.98 float=y maxiter=256 periodicity=0 colors=@chroma.map } Inv4Klein_Group_7 {; ; reset=2002 type=formula formulafile=fmlpost.frm formulaname=Inv4Klein_Group center-mag=4.52648/0/0.1640166 params=0.86602540378444/2.3/-1/0.5 float=y periodicity=0 colors=@chroma.map } Mod4Klein_Group_1 {; ; reset=2002 type=formula formulafile=flmpost.frm formulaname=Mod4Klein_Group corners=-4.01749/4.01749/-2.048485/3.977749 params=1/1/2/1.5/0/0 float=y periodicity=0 colors=@chroma.map } Mod4Klein_Group_2 {; ; reset=2002 type=formula formulafile=fmlpost.frm formulaname=Mod4Klein_Group corners=-7.289188/1.594677/5.107935/-6.737217/1.594677/-6.737217 params=1/1/1/2/1/1 float=y periodicity=0 colors=@chroma.map } Mod5Klein_Group_1 {; ; reset=2002 type=formula formulafile=fmlpost.frm formulaname=Mod5Klein_Group corners=2.408138/-2.408138/-5.688688/0.7330124/-2.408138/0.7330124 params=1/0.5/0.25/0.75/0/1.5/2.5/0 float=y periodicity=0 colors=@chroma.map } Mod5Klein_Group_2 {; ; reset=2002 type=formula formulafile=fmlpost.frm formulaname=Mod5Klein_Group corners=-374.0298/251.9447/-234.7405/234.7405 params=1/1.25/1/1.75/-0.25/0/2.5/0 float=y periodicity=0 colors=@chroma.map } Mod5Klein_Group_3 {; ; reset=2002 type=formula formulafile=fmlpost.par formulaname=Mod5Klein_Group corners=2.6930253/-0.94438741/-2.8427454/2.4755537/-1.1692268/2.3069241 params=1/1.25/1.5/2.25/0.25/0.5/1/0 float=y periodicity=0 colors=@chroma.map } frm:Inv4Klein_Group {;Modification of "3Klein_Group" by Morgan L. Owens ;Circle 4 has "inverted" function. ;periodicity=no ;( Circles all touching: r123 = sqrt(3)/2 ; r4 = sqrt(3)/2 + 1 ; c4 = 0 ) ;------------------------------------ ;p1r: radii 1 to 3 ;p1i: radius 4 ;p2r: Center of circle 4 x-coordinate ;p2i: Center of circle 4 y-coordinate ;------------------------------------ ; ang = 2*pi/3 c1 = 1 c2 = exp((0,1)*ang) c3 = exp((0,2)*ang) r123 = real(p1) r4 = imag(p1) rr123 = sqr(r123) rr4 = sqr(r4) z = pixel: inside = 0 IF (|z-c1| < rr123) z = r123*conj(r123/(z-c1)) + c1 inside = 1 ELSEIF (|z-c2| < rr123) z = r123*conj(r123/(z-c2)) + c2 inside = 1 ELSEIF (|z-c3| < rr123) z = r123*conj(r123/(z-c3)) + c3 inside = 1 ELSEIF (|z-p2| > rr4) z = r4*conj(r4/(z-p2)) + p2 inside = 1 ENDIF inside } frm:Alt3Klein_Group {;Modification of "3Klein_Group" by Morgan L. Owens ;Each circle is always touching the other two. ;periodicity=no ;-------------- ;p1r: radius 1 ;p1i: radius 2 ;p2r: radius 3 ;------------------------------ r1 = real(p1) r2 = imag(p1) r3 = real(p2) ;c1 = -r1 ;c2 = r2 c3 = ((r1-r2)*r3+flip(sqrt((r1+r2+r3)*r1*r2*r3)*2))/(r1+r2) rr1 = sqr(r1) rr2 = sqr(r2) rr3 = sqr(r3) z = pixel: inside = 0 IF (|z+r1| < rr1) z = r1*conj(r1/(z+r1)) - r1 inside = 1 ELSEIF (|z-r2| < rr2) z = r2*conj(r2/(z-r2)) + r2 inside = 1 ELSEIF (|z-c3| < rr3) z = r3*conj(r3/(z-c3)) + c3 inside = 1 ENDIF inside } frm:Alt4Klein_Group {;Modification of "4Klein_Group" by Morgan L. Owens ;Circles 1 and 2 touch, 3 and 4 each touch 1 and 2. ;periodicity=no ;-------------- ;p1r: radius 1 ;p1i: radius 2 ;p2r: radius 3 ;p2i: radius 4 ;------------------------------ r1 = real(p1) r2 = imag(p1) r3 = real(p2) r4 = imag(p2) ;c1 = -r1 ;c2 = r2 c3 = ((r1-r2)*r3+flip(sqrt((r1+r2+r3)*r1*r2*r3)*2))/(r1+r2) c4 = ((r1-r2)*r4-flip(sqrt((r1+r2+r4)*r1*r2*r4)*2))/(r1+r2) rr1 = sqr(r1) rr2 = sqr(r2) rr3 = sqr(r3) rr4 = sqr(r4) z = pixel: inside = 0 IF (|z+r1| < rr1) z = r1*conj(r1/(z+r1)) - r1 inside = 1 ELSEIF (|z-r2| < rr2) z = r2*conj(r2/(z-r2)) + r2 inside = 1 ELSEIF (|z-c3| < rr3) z = r3*conj(r3/(z-c3)) + c3 inside = 1 ELSEIF (|z-c4| < rr4) z = r4*conj(r4/(z-c4)) + c4 inside = 1 ENDIF inside } frm:Mod4Klein_Group {;Modification of "3Klein_Group" by Morgan L. Owens ;Each of the circles 1 - 3 always touches the other two. ;Parameters of circle 4 are not restricted. Circle has "inverted" function. ;periodicity=no ;------------------------------------ ;p1r: radius 1 ;p1i: radius 2 ;p2r: radius 3 ;p2i: radius 4 ;p3r: Center of circle 4 x-coordinate ;p3i: Center of circle 4 y-coordinate ;------------------------------------ r1 = real(p1) r2 = imag(p1) r3 = real(p2) r4 = imag(p2) ;c1 = -r1 ;c2 = r2 c3 = ((r1-r2)*r3+flip(sqrt((r1+r2+r3)*r1*r2*r3)*2))/(r1+r2) rr1 = sqr(r1) rr2 = sqr(r2) rr3 = sqr(r3) rr4 = sqr(r4) z = pixel: inside = 0 IF (|z+r1| < rr1) z = r1*conj(r1/(z+r1)) - r1 inside = 1 ELSEIF (|z-r2| < rr2) z = r2*conj(r2/(z-r2)) + r2 inside = 1 ELSEIF (|z-c3| < rr3) z = r3*conj(r3/(z-c3)) + c3 inside = 1 ELSEIF (|z-p3| > rr4) z = r4*conj(r4/(z-p3)) + p3 inside = 1 ENDIF inside } frm:Mod5Klein_Group {;Modification of "4Klein_Group" by Morgan L. Owens ;Circle 1 and 2 touch, 3 and 4 each touch 1 and 2. ;Parameters of circle 5 are not restricted. Circle has "inverted" function. ;periodicity=no ;------------------------------------ ;p1r: radius 1 ;p1i: radius 2 ;p2r: radius 3 ;p2i: radius 4 ;p3r: Center of circle 5 x-coordinate ;p3i: Center of circle 5 y-coordinate ;p4r: radius 5 ;------------------------------------ r1 = real(p1) r2 = imag(p1) r3 = real(p2) r4 = imag(p2) r5 = real(p4) ;c1 = -r1 ;c2 = r2 c3 = ((r1-r2)*r3+flip(sqrt((r1+r2+r3)*r1*r2*r3)*2))/(r1+r2) c4 = ((r1-r2)*r4-flip(sqrt((r1+r2+r4)*r1*r2*r4)*2))/(r1+r2) rr1 = sqr(r1) rr2 = sqr(r2) rr3 = sqr(r3) rr4 = sqr(r4) rr5 = sqr(r5) z = pixel: inside = 0 IF (|z+r1| < rr1) z = r1*conj(r1/(z+r1)) - r1 inside = 1 ELSEIF (|z-r2| < rr2) z = r2*conj(r2/(z-r2)) + r2 inside = 1 ELSEIF (|z-c3| < rr3) z = r3*conj(r3/(z-c3)) + c3 inside = 1 ELSEIF (|z-c4| < rr4) z = r4*conj(r4/(z-c4)) + c4 inside = 1 ELSEIF (|z-p3| > rr5) z = r5*conj(r5/(z-p3)) + p3 inside = 1 ENDIF inside } ;-------------------------- End pars --------------------------