Morgan L. Owens wrote:
D3_Man { c1=real(pixel),c2=imag(pixel),c3=0 z1=z2=z3=0: nz1=z1*z1+z2*z3+z3*z2+c1 nz2=z1*z2+z2*z1+z3*z3+c2 nz3=z1*z3+z2*z2+z3*z1+c3 z1=nz1,z2=nz2,z3=nz3 z=nz1+flip(nz2) |z-pixel| < 100 }
Has a straightforward Julia:
D3_Jul { z1=real(pixel),z2=imag(pixel),z3=0 c1=real(p1),c2=imag(p1),c3=real(p2): nz1=z1*z1+z2*z3+z3*z2+c1 nz2=z1*z2+z2*z1+z3*z3+c2 nz3=z1*z3+z2*z2+z3*z1+c3 z1=nz1,z2=nz2,z3=nz3 z=nz1+flip(nz2) |z-pixel| < 100 }
[...]
If Gerald K. Dobiasovsky could work his magic (hint, hint) on these numbers, we could have a two-dimensional projection of the entire three-dimensional set.
Quite a career, I'd say, to be considered an expert on 3d-rendering in Fractint after posting a single par on that matter :-) Sadly D3_Man/Jul sets turn out to be cylinders with quadratic Mandelbrots/Julias as their cross-section. The 2d images look skewed because the cylinder's axis is not parallel to any coordinate axis. But teke a look yourself (Hint: It's enough to run these in a small view-window): ----------------------- Begin PAR ---------------------------- D3_Jul3d { reset=2002 type=formula formulafile=gkd.frm formulaname=Rot3d_D3_Jul corners=-1.64/1.64/-1.23/1.23 params=0/0/-1.5/1.5/-0.75/0/0/4/50/253 float=y maxiter=1000000000 outside=summ periodicity=0 colors=@altern.map } D3_Man3d { reset=2002 type=formula formulafile=gkd.frm formulaname=Rot3d_D3_Man corners=-2.102784/0.6012163/-1.25159/0.77641 params=0/0/-1/1/0/0/0/4/50/253 float=y maxiter=1000000000 outside=summ periodicity=0 colors=@altern.map } frm:Rot3d_D3_Jul {;periodicity=no, outside=summ ;maxit > p5real*(p5imag+1) ; ;p1real: Rotation about x-axis (1st rotation) ;p1imag: Rotation about y-axis (2nd rotation) ;p2real: Far clipping plane ;p2imag: Near clipping plane ;p3real: cx ;p3imag: cy ;p4real: cz ;p4imag: Bailout ;p5real: Maxiter per slice ;p5imag: Number of slices - 1 ; bailout = imag(p4), tiefnum = imag(p5) delta = (real(p2)-imag(p2))/tiefnum tmp = pi/180 rotXax = exp(flip(real(p1)*tmp)) rotYax = exp(flip(imag(p1)*tmp)) ; HPixXY = rotYax VPixZ = real(rotXax) VPixXY = flip(conj(rotYax)) NXY = VPixZ*VPixXY NZ = imag(conj(rotXax)) VPixXY = -NZ*VPixXY ; xy = xy0 = NXY*imag(p2) + HPixXY*real(pixel)\ + VPixXY*imag(pixel) zz = zz0 = NZ*imag(p2) + HPixZ*real(pixel)\ + VPixZ*imag(pixel) dxy = NXY*delta, dzz = NZ*delta j = m = i = 0: w1 = real(xy), w2 = imag(xy), w3 = zz xy = sqr(w1) + 2*w2*w3 xy = xy + flip(sqr(w3)+2*w1*w2) + p3 zz = sqr(w2) + 2*w1*w3 + real(p4) IF (bailout >= |xy|+sqr(zz)) i = i + 1 ELSE i = 0 m = m + 1 xy = xy0 = xy0 + dxy zz = zz0 = zz0 + dzz ENDIF z = m - j j = j + 1 tiefnum >= m && p5 >= i } frm:Rot3d_D3_Man {;periodicity=no, outside=summ ;maxit > p5real*(p5imag+1) ; ;p1real: Rotation about x-axis (1st rotation) ;p1imag: Rotation about y-axis (2nd rotation) ;p2real: Far clipping plane ;p2imag: Near clipping plane ;p3real: x(0) ;p3imag: y(0) ;p4real: z(0) ;p4imag: Bailout ;p5real: Maxiter per slice ;p5imag: Number of slices - 1 ; bailout = imag(p4), tiefnum = imag(p5) delta = (real(p2)-imag(p2))/tiefnum tmp = pi/180 rotXax = exp(flip(real(p1)*tmp)) rotYax = exp(flip(imag(p1)*tmp)) ; HPixXY = rotYax VPixZ = real(rotXax) VPixXY = flip(conj(rotYax)) NXY = VPixZ*VPixXY NZ = imag(conj(rotXax)) VPixXY = -NZ*VPixXY ; cxy = cxy0 = NXY*imag(p2) + HPixXY*real(pixel)\ + VPixXY*imag(pixel) cz = cz0 = NZ*imag(p2) + HPixZ*real(pixel)\ + VPixZ*imag(pixel) dcxy = NXY*delta, dcz = NZ*delta xy = p3, zz = real(p4) j = m = i = 0: w1 = real(xy), w2 = imag(xy), w3 = zz xy = sqr(w1) + 2*w2*w3 xy = xy + flip(sqr(w3)+2*w1*w2) + cxy zz = sqr(w2) + 2*w1*w3 + cz IF (bailout >= |xy|+sqr(zz)) i = i + 1 ELSE i = 0 m = m + 1 cxy = cxy0 = cxy0 + dcxy cz = cz0 = cz0 + dcz xy = p3, zz = real(p4) ENDIF z = m - j j = j + 1 tiefnum >= m && p5 >= i } ------------------------ End PAR ----------------------------- Regards, Gerald