comment { These formulas involve lots of interesting math. All formulas (except FastJulia) written by Tim Coe. Last updated September 21, 2002. } Manseig { init: complex angl = (sqrt(@start*@start+4)-@start)/2 angl = 1/(@cfrac2 + angl) angl = 1/(@cfrac1 + angl) angl = exp(angl*#pi*(0,2))/2 angl = angl - sqr(angl) z = #pixel loop: z = sqr(z) + angl bailout: |z| <= @bailout default: title = "Mandel to Seigel" center = (-0.5, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param cfrac1 caption = "Cont Frac 1" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param cfrac2 caption = "Cont Frac 2" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 4.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "FastJulia" seed = start bailout = bailout } FastJulia(ORIGIN) { builtin: type = 2 default: title = "Built-in fast Julia" param seed caption = "Julia seed" default = (-1.25, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param bailout caption = "Bailout value" default = 4.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "FastMandel" bailout = bailout } Manphuge { ; Generic Mandelbrot set init: float endval = exp(40) if (@bailout < 80) endval = exp(0.5*@bailout) endif z = @start loop: if real(z) < 40 && real(z) < 0.5*@bailout z = exp(z) + #pixel elseif real(z) - @bailout < -40 if ((imag(z)/(2*#pi)) - floor(imag(z)/(2*#pi))) < 0.25 z = endval elseif ((imag(z)/(2*#pi)) - floor(imag(z)/(2*#pi))) > 0.75 z = endval else z = (-45,0) endif elseif |exp(z - @bailout) + 1| < 1 z = (-45,0) else z = endval endif bailout: real(z) - 1 <= @bailout default: title = "Manphuge" center = (0, 0) param start caption = "Starting point" default = (-45,0) hint = "Perturbation. Use (0,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (2,0) hint = "This defines the power of the Mandelbrot set. Use (2,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 20.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Julphuge" seed = #pixel power = power bailout = bailout } Julphuge { ; Generic Julia set init: float endval = exp(40) if (@bailout < 80) endval = exp(0.5*@bailout) endif z = #pixel loop: if real(z) < 40 && real(z) < 0.5*@bailout z = exp(z) + @seed elseif real(z) - @bailout < -40 if ((imag(z)/(2*#pi)) - floor(imag(z)/(2*#pi))) < 0.25 z = endval elseif ((imag(z)/(2*#pi)) - floor(imag(z)/(2*#pi))) > 0.75 z = endval else z = (-45,0) endif elseif |exp(z - @bailout) + 1| < 1 z = (-45,0) else z = endval endif bailout: real(z) - 1 <= @bailout default: title = "Julphuge" param seed caption = "Julia seed" default = (-1, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (2,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 20.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Manphuge" power = power bailout = bailout } Manolog { ; Generic Mandelbrot set init: z = @start loop: z = z + (z + 1)*sqr(z) + #pixel bailout: |z| <= @bailout default: title = "Manolog" center = (0, 0) param start caption = "Starting point" default = (-0.333333333333333333333,0.4714045207910316829) hint = "Perturbation. Use (0,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (2,0) hint = "This defines the power of the Mandelbrot set. Use (2,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 20.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Junolog" seed = #pixel power = power bailout = bailout } Junolog { ; Generic Julia set init: z = #pixel loop: z = z + (z + 1)*sqr(z) + @seed bailout: |z| <= @bailout default: title = "Junolog" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (2,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 20.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Manolog" power = power bailout = bailout } Dualies { ; Generic Mandelbrot set init: z = @start*sqrt(@power/3) loop: z = z*(sqr(z) + @power) + #pixel bailout: |z| <= @bailout default: title = "Dualies" center = (0, 0) param start caption = "Starting point" default = (0,1) hint = "Perturbation. Use (0,1) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 20.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jualies" seed = #pixel power = power bailout = bailout } Jualies { ; Generic Julia set init: z = #pixel loop: z = z*(sqr(z) + @power) + @seed bailout: |z| <= @bailout default: title = "Jualies" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 20.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Dualies" power = power bailout = bailout } Follow { ; Generic Mandelbrot set init: complex a = -3*#pixel*#pixel complex b = -#pixel*(2*#pixel*#pixel - 1) z = @start*#pixel loop: z = z*(sqr(z) + a) + b bailout: |z| <= @bailout default: title = "Follow" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jollow" seed = #pixel power = power bailout = bailout } Jollow { ; Generic Julia set init: complex a = -3*@seed*@seed complex b = -@seed*(2*@seed*@seed - 1) z = #pixel loop: z = z*(sqr(z) + a) + b bailout: |z| <= @bailout default: title = "Jollow" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Follow" power = power bailout = bailout } Tritrail { ; Generic Mandelbrot set init: complex pix3 = #pixel*#pixel*#pixel complex q = #pixel*(12 - pix3)/(12 - 2*pix3) complex a3 = -0.3333333333333333333*(#pixel + q) complex a2 = 0.5*#pixel*q z = q loop: z = ((0.25*z + a3)*z + a2)*sqr(z) + #pixel bailout: |z| <= @bailout default: title = "Tritrail" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jritrail" seed = #pixel power = power bailout = bailout } Jritrail { ; Generic Julia set init: complex pix3 = @seed*@seed*@seed complex q = @seed*(12 - pix3)/(12 - 2*pix3) complex a3 = -0.3333333333333333333*(@seed + q) complex a2 = 0.5*@seed*q z = #pixel loop: z = ((0.25*z + a3)*z + a2)*sqr(z) + @seed bailout: |z| <= @bailout default: title = "Jritrail" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Tritrail" power = power bailout = bailout } Trailfix { ; Generic Mandelbrot set init: complex s = (#pixel*#pixel - 2)^(1/3) complex p = sqrt(2)*s/#pixel complex r = p - s complex q = r*(r - 2*p)/(2*r - 6*p) complex a3 = -0.3333333333333333333*(p + q + r) complex a2 = 0.5*(p*q + p*r + q*r) complex a1 = -p*q*r z = q loop: z = (((0.25*z + a3)*z + a2)*z + a1)*z bailout: |z| <= @bailout default: title = "Trailfix" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jrailfix" seed = #pixel power = power bailout = bailout } Jrailfix { ; Generic Julia set init: complex s = (@seed*@seed - 2)^(1/3) complex p = sqrt(2)*s/@seed complex r = p - s complex q = r*(r - 2*p)/(2*r - 6*p) complex a3 = -0.3333333333333333333*(p + q + r) complex a2 = 0.5*(p*q + p*r + q*r) complex a1 = -p*q*r z = #pixel loop: z = (((0.25*z + a3)*z + a2)*z + a1)*z bailout: |z| <= @bailout default: title = "Jrailfix" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Trailfix" power = power bailout = bailout } Trail112 { ; Generic Mandelbrot set init: complex p = (#pixel + 1/(120*#pixel) - 1/6)^(-0.25) complex q = p*(1 - 6*#pixel) complex a4 = -0.25*(2*q + p) complex a3 = 0.3333333333333333333*q*(2*p + q) complex a2 = -0.5*p*q*q z = q loop: z = (((0.2*z + a4)*z + a3)*z + a2)*sqr(z) + p bailout: |z| <= @bailout default: title = "Trail112" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jrail112" seed = #pixel power = power bailout = bailout } Jrail112 { ; Generic Julia set init: complex p = (@seed + 1/(120*@seed) - 1/6)^(-0.25) complex q = p*(1 - 6*@seed) complex a4 = -0.25*(2*q + p) complex a3 = 0.3333333333333333333*q*(2*p + q) complex a2 = -0.5*p*q*q z = #pixel loop: z = (((0.2*z + a4)*z + a3)*z + a2)*sqr(z) + p bailout: |z| <= @bailout default: title = "Jrail112" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Trail112" power = power bailout = bailout } Trail10n { ; Generic Mandelbrot set init: complex u = 1/#pixel complex un1 = u^(@n + 1) complex pn1 = u*(@n + 1)*(@n + 2)/((@n + 2)*un1 - (@n + 1)*u*un1 - 1) complex p = pn1^(1/(@n + 1)) complex an2 = 1/(@n + 2) complex an1 = -p/(@n + 1) complex a0 = u*p - an2*p*pn1 - an1*pn1 z = a0 loop: z = (an2*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Trail10n" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param n caption = "Order" default = 1 hint = "This defines the order of the third critical point. The \ first critical point has order 1 and the second 0." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jrail10n" seed = #pixel n = n bailout = bailout } Jrail10n { ; Generic Julia set init: complex u = 1/@seed complex un1 = u^(@n + 1) complex pn1 = u*(@n + 1)*(@n + 2)/((@n + 2)*un1 - (@n + 1)*u*un1 - 1) complex p = pn1^(1/(@n + 1)) complex an2 = 1/(@n + 2) complex an1 = -p/(@n + 1) complex a0 = u*p - an2*p*pn1 - an1*pn1 z = #pixel loop: z = (an2*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Jrail10n" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param n caption = "Order" default = 1 hint = "This defines the order of the third critical point." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Trail10n" n = n bailout = bailout } Trail10n1 { ; Generic Mandelbrot set init: complex u = #pixel complex bt = 1 if @unwrap == 1 bt = u u = sqr(u) + @bp1 elseif @unwrap == 2 bt = sqr(u) - 1 u = 0.25*u*(sqr(u) - 3)*(@bp1 - @bp2) + 0.5*(@bp1 + @bp2) endif complex un2 = u^(@n + 2) complex an3 = 1/(@n + 3) complex an2 = -1/(@n + 2) complex an1 = 1/(@n + 1) complex a = un2*u*(an3 + an2) complex b = un2*(an2 + an1) complex c = an3 + u*an2 complex d = an2 + u*an1 complex qa = b - d complex qb = a - c + d complex qc = c complex qrad = (sqr(qb) - 4*qa*qc)/(sqr(@branchcut*bt)*(u^(2*@inout))) complex s = (sqrt(qrad)*@branchcut*bt*(u^@inout) - qb)/(2*qa) complex pn2 = -s/(c + d*s) complex p = pn2^(1/(@n + 2)) an2 = (u + s)*p*an2 an1 = u*s*sqr(p)*an1 complex a0 = s*p z = a0 if @showbranch && (real(qrad) < -10*abs(imag(qrad))) z = 1e15 endif loop: z = ((an3*z + an2)*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Trail10n1" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param n caption = "Order" default = 1 hint = "This defines the order of the third critical point. The \ first critical point has order 1 and the second 0." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param bp1 caption = "Branch Point 1" default = (1,0) hint = "First branch point to unwrap." endparam param bp2 caption = "Branch Point 2" default = (1,0) hint = "Second branch point to unwrap." endparam param unwrap caption = "Unwrap" default = 0 hint = "This specifies the number of branch points to unwrap. \ Currently 0 to 2 are supported." endparam param showbranch caption = "Show branches" default = false hint = "There are six branch points to this parametization. This \ unwraps two and duplicates the rest." endparam param inout caption = "Branch In" default = 0 hint = "This sends branch cuts either in or out. 0 or 3+Order are \ good values" endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jrail10n1" seed = #pixel n = n branchcut = branchcut inout = inout bailout = bailout } Jrail10n1 { ; Generic Julia set init: complex u = @seed complex un2 = u^(@n + 2) complex an3 = 1/(@n + 3) complex an2 = -1/(@n + 2) complex an1 = 1/(@n + 1) complex a = un2*u*(an3 + an2) complex b = un2*(an2 + an1) complex c = an3 + u*an2 complex d = an2 + u*an1 complex qa = b - d complex qb = a - c + d complex qc = c complex qrad = (sqr(qb) - 4*qa*qc)/(sqr(@branchcut)*(u^(2*@inout))) complex s = (sqrt(qrad)*@branchcut*(u^@inout) - qb)/(2*qa) complex pn2 = -s/(c + d*s) complex p = pn2^(1/(@n + 2)) an2 = (u + s)*p*an2 an1 = u*s*sqr(p)*an1 complex a0 = s*p z = 2*#pixel loop: z = ((an3*z + an2)*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Jrail10n1" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param n caption = "Order" default = 1 hint = "This defines the order of the third critical point." endparam param inout caption = "Branch In" default = 0 hint = "This sends branch cuts either in or out. 0 or 3+Order are \ good values" endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Trail10n1" n = n bailout = bailout } Trail11n1 { ; Generic Mandelbrot set init: complex u = #pixel complex un2 = u^(@n + 2) complex an4 = 1/(@n + 4) complex an3 = -1/(@n + 3) complex an2 = 1/(@n + 2) complex an1 = -1/(@n + 1) complex a = un2*u*(u*an4 + (1 + u)*an3 + an2) complex b = un2*(u*an3 + (1 + u)*an2 + an1) complex c = an4 + (1 + u)*an3 + u*an2 complex d = an3 + (1 + u)*an2 + u*an1 complex qa = b - d complex qb = a - c + d complex qc = c complex qrad = (sqr(qb) - 4*qa*qc)/(sqr(@branchcut)*(u^(2*@inout))) complex s = (sqrt(qrad)*@branchcut*(u^@inout) - qb)/(2*qa) complex pn3 = -s/(c + d*s) complex p = pn3^(1/(@n + 3)) an3 = (u + s + 1)*p*an3 an2 = (u + s + u*s)*sqr(p)*an2 an1 = u*s*sqr(p)*p*an1 complex a0 = s*p z = a0 if @showbranch && (real(qrad) < -10*abs(imag(qrad))) z = 1e15 endif loop: z = (((an4*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Trail11n1" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param n caption = "Order" default = 1 hint = "This defines the order of the third critical point. The \ first critical point has order 1 and the second 0." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param showbranch caption = "Show branches" default = false hint = "There are six branch points to this parametization. This \ unwraps two and duplicates the rest." endparam param inout caption = "Branch In" default = 0 hint = "This sends branch cuts either in or out. 0 or 3+Order are \ good values" endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jrail11n1" seed = #pixel n = n branchcut = branchcut inout = inout bailout = bailout } Jrail11n1 { ; Generic Julia set init: complex u = @seed complex un2 = u^(@n + 2) complex an4 = 1/(@n + 4) complex an3 = -1/(@n + 3) complex an2 = 1/(@n + 2) complex an1 = -1/(@n + 1) complex a = un2*u*(u*an4 + (1 + u)*an3 + an2) complex b = un2*(u*an3 + (1 + u)*an2 + an1) complex c = an4 + (1 + u)*an3 + u*an2 complex d = an3 + (1 + u)*an2 + u*an1 complex qa = b - d complex qb = a - c + d complex qc = c complex qrad = (sqr(qb) - 4*qa*qc)/(sqr(@branchcut)*(u^(2*@inout))) complex s = (sqrt(qrad)*@branchcut*(u^@inout) - qb)/(2*qa) complex pn3 = -s/(c + d*s) complex p = pn3^(1/(@n + 3)) an3 = (u + s + 1)*p*an3 an2 = (u + s + u*s)*sqr(p)*an2 an1 = u*s*sqr(p)*p*an1 complex a0 = s*p z = 2*#pixel loop: z = (((an4*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Jrail11n1" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param n caption = "Order" default = 1 hint = "This defines the order of the third critical point." endparam param inout caption = "Branch In" default = 0 hint = "This sends branch cuts either in or out. 0 or 3+Order are \ good values" endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Trail11n1" n = n bailout = bailout } Trail20n1 { ; Generic Mandelbrot set init: complex u = #pixel complex un2 = u^(@n + 2) complex an4 = 1/(@n + 4) complex an3 = -1/(@n + 3) complex an2 = 1/(@n + 2) complex an1 = -1/(@n + 1) complex a = un2*u*(u*an4 + (u + u)*an3 + u*an2) complex b = un2*(u*an3 + (u + u)*an2 + u*an1) complex c = an4 + (u + u)*an3 + u*u*an2 complex d = an3 + (u + u)*an2 + u*u*an1 complex qa = b - d complex qb = a - c + d complex qc = c complex qrad = (sqr(qb) - 4*qa*qc)/(sqr(@branchcut)*(u^(2*@inout))) complex s = (sqrt(qrad)*@branchcut*(u^@inout) - qb)/(2*qa) complex pn3 = -s/(c + d*s) complex p = pn3^(1/(@n + 3)) an3 = (u + s + u)*p*an3 an2 = (u*u + s*u + u*s)*sqr(p)*an2 an1 = u*u*s*sqr(p)*p*an1 complex a0 = s*p z = a0 if @showbranch && (real(qrad) < -10*abs(imag(qrad))) z = 1e15 endif loop: z = (((an4*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Trail20n1" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param n caption = "Order" default = 1 hint = "This defines the order of the third critical point. The \ first critical point has order 1 and the second 0." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param showbranch caption = "Show branches" default = false hint = "There are six branch points to this parametization. This \ unwraps two and duplicates the rest." endparam param inout caption = "Branch In" default = 0 hint = "This sends branch cuts either in or out. 0 or 3+Order are \ good values" endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jrail20n1" seed = #pixel n = n branchcut = branchcut inout = inout bailout = bailout } Jrail20n1 { ; Generic Julia set init: complex u = @seed complex un2 = u^(@n + 2) complex an4 = 1/(@n + 4) complex an3 = -1/(@n + 3) complex an2 = 1/(@n + 2) complex an1 = -1/(@n + 1) complex a = un2*u*(u*an4 + (u + u)*an3 + u*an2) complex b = un2*(u*an3 + (u + u)*an2 + u*an1) complex c = an4 + (u + u)*an3 + u*u*an2 complex d = an3 + (u + u)*an2 + u*u*an1 complex qa = b - d complex qb = a - c + d complex qc = c complex qrad = (sqr(qb) - 4*qa*qc)/(sqr(@branchcut)*(u^(2*@inout))) complex s = (sqrt(qrad)*@branchcut*(u^@inout) - qb)/(2*qa) complex pn3 = -s/(c + d*s) complex p = pn3^(1/(@n + 3)) an3 = (u + s + u)*p*an3 an2 = (u*u + s*u + u*s)*sqr(p)*an2 an1 = u*u*s*sqr(p)*p*an1 complex a0 = s*p z = 2*#pixel loop: z = (((an4*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Jrail20n1" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param n caption = "Order" default = 1 hint = "This defines the order of the third critical point." endparam param inout caption = "Branch In" default = 0 hint = "This sends branch cuts either in or out. 0 or 3+Order are \ good values" endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Trail20n1" n = n bailout = bailout } Trail10n2 { ; Generic Mandelbrot set init: complex u = #pixel complex un2 = u^(@n + 2) complex an4 = 1/(@n + 4) complex an3 = -1/(@n + 3) complex an2 = 1/(@n + 2) complex an1 = -1/(@n + 1) complex a = un2*u*u*(an4 + an3) complex b = 2*un2*u*(an3 + an2) complex c = un2*(an2 + an1) complex d = an4 + u*an3 complex g = 2*(an3 + u*an2) complex h = an2 + u*an1 complex s = 0 complex cr1 = 0.5*(flip(sqrt(3)) - 1) complex cr2 = sqr(cr1) complex ica3 = 1/(c - h) complex ca2 = (b - g + h)*ica3 complex ca1 = (a - d + g)*ica3 complex ca0 = d*ica3 complex cq = (3*ca1 - ca2*ca2)/9 complex cr = (9*ca2*ca1 - 27*ca0 - 2*ca2*ca2*ca2)/54 if real(cr) < 0 complex w = (cr - sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) else complex w = (cr + sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) endif complex wi = cq/w complex s0 = w - wi complex s1 = w*cr1 - wi*cr2 complex s2 = w*cr2 - wi*cr1 if |s0| > |s1| s = s0 s0 = s1 s1 = s endif if |s0| > |s2| s = s0 s0 = s2 s2 = s endif if |s1| > |s2| s = s1 s1 = s2 s2 = s endif s = s1 if @sheet == 0 s = s0 elseif @sheet == 1 s = s1 elseif @sheet == 2 s = s2 elseif @sheet == 4 if imag(u) > 0 s = s0 endif else if imag(u) > 0 s = s2 endif endif complex s = s - ca2/3 complex pn3 = -s/(d + g*s + h*s*s) complex p = pn3^(1/(@n + 3)) an3 = (u + s + s)*p*an3 an2 = (s*s + s*u + u*s)*sqr(p)*an2 an1 = u*s*s*sqr(p)*p*an1 complex a0 = s*p z = a0 if @showbranch z = 1e15 endif loop: z = (((an4*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Trail10n2" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param n caption = "Order" default = 1 hint = "This defines the order of the third critical point. The \ first critical point has order 1 and the second 0." endparam param sheet caption = "Sheets" default = 3 hint = "This has three sheets. Choose bottom, middle, top, half \ bottom half mid, or half mid half top." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param showbranch caption = "Show branches" default = false hint = "There are six branch points to this parametization. This \ unwraps two and duplicates the rest." endparam param inout caption = "Branch In" default = 0 hint = "This sends branch cuts either in or out. 0 or 3+Order are \ good values" endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jrail10n2" seed = #pixel n = n branchcut = branchcut inout = inout bailout = bailout } Jrail10n2 { ; Generic Julia set init: complex u = @seed complex un2 = u^(@n + 2) complex an4 = 1/(@n + 4) complex an3 = -1/(@n + 3) complex an2 = 1/(@n + 2) complex an1 = -1/(@n + 1) complex a = un2*u*(u*an4 + (u + u)*an3 + u*an2) complex b = un2*(u*an3 + (u + u)*an2 + u*an1) complex c = an4 + (u + u)*an3 + u*u*an2 complex d = an3 + (u + u)*an2 + u*u*an1 complex qa = b - d complex qb = a - c + d complex qc = c complex qrad = (sqr(qb) - 4*qa*qc)/(sqr(@branchcut)*(u^(2*@inout))) complex s = (sqrt(qrad)*@branchcut*(u^@inout) - qb)/(2*qa) complex pn3 = -s/(c + d*s) complex p = pn3^(1/(@n + 3)) an3 = (u + s + u)*p*an3 an2 = (u*u + s*u + u*s)*sqr(p)*an2 an1 = u*u*s*sqr(p)*p*an1 complex a0 = s*p z = 2*#pixel loop: z = (((an4*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Jrail10n2" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param n caption = "Order" default = 1 hint = "This defines the order of the third critical point." endparam param inout caption = "Branch In" default = 0 hint = "This sends branch cuts either in or out. 0 or 3+Order are \ good values" endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Trail10n2" n = n bailout = bailout } Trail1111 { ; Generic Mandelbrot set init: complex u = 1/#pixel complex a = 1/5 - (1 + u)/4 + u/3 complex b = 1/4 - (1 + u)/3 + u/2 complex c = (u^5)*1/5 - (u^4)*(1 + u)/4 + (u^3)*u/3 complex d = (u^4)*1/4 - (u^3)*(1 + u)/3 + (u^2)*u/2 complex qa = a*d - b*c complex qb = d - b - c complex qrad = (sqr(qb) + 4*qa)/(sqr(@branchcut)*(u^10)) complex p4 = (sqrt(qrad)*@branchcut*(u^5) - qb)/(2*qa) complex p = p4^(1/4) complex q = p*(1 + c*p4)/(d*p4) complex r = u*p complex a4 = -0.25*(p + q + r) complex a3 = 0.3333333333333333333*(p*q + p*r + q*r) complex a2 = -0.5*p*q*r z = q loop: z = (((0.2*z + a4)*z + a3)*z + a2)*sqr(z) + p bailout: |z| <= @bailout default: title = "Trail1111" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jrail1111" seed = #pixel branchcut = branchcut bailout = bailout } Jrail1111 { ; Generic Julia set init: complex u = 1/@seed complex a = 1/5 - (1 + u)/4 + u/3 complex b = 1/4 - (1 + u)/3 + u/2 complex c = (u^5)*1/5 - (u^4)*(1 + u)/4 + (u^3)*u/3 complex d = (u^4)*1/4 - (u^3)*(1 + u)/3 + (u^2)*u/2 complex qa = a*d - b*c complex qb = d - b - c complex qrad = (sqr(qb) + 4*qa)/(sqr(@branchcut)*(u^10)) complex p4 = (sqrt(qrad)*@branchcut*(u^5) - qb)/(2*qa) complex p = p4^(1/4) complex q = p*(1 + c*p4)/(d*p4) complex r = u*p complex a4 = -0.25*(p + q + r) complex a3 = 0.3333333333333333333*(p*q + p*r + q*r) complex a2 = -0.5*p*q*r z = #pixel*2 loop: z = (((0.2*z + a4)*z + a3)*z + a2)*sqr(z) + p bailout: |z| <= @bailout default: title = "Jrail1111" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Trail1111" branchcut = branchcut bailout = bailout } Disct1001 { ; Generic Mandelbrot set init: complex u = #pixel float hr = real(@hypcent) float hi = imag(@hypcent) u = ((hr + 1)*u + (hr - 1))/((hr - 1)*u + (hr + 1)) u = ((hi + 1)*u + flip(hi - 1))/(-flip(hi - 1)*u + (hi + 1)) if |u| > 1 u = 1/u endif complex fu00 = (1.77690860944722, 0) complex fu01 = (1.46881047324958, 0) complex fu02 = (1.46881047324958, 0) complex fu03 = (1.77690860944722, 0) complex fu10 = (3.94588866140397, 0) complex fu11 = (1.85030181832271, 3.33862554194208) complex fu12 = (1.85030181832271, -3.33862554194208) complex fu13 = (3.94588866140397, 0) complex fu20 = (2.46378306900086, 0) complex fu21 = (0, 2.25171645885873) complex fu22 = (0, -2.25171645885873) complex fu23 = (2.46378306900086, 0) complex fu30 = (3.94588866140397, 0) complex fu31 = (-1.85030181832271, 3.33862554194208) complex fu32 = (-1.85030181832271, -3.33862554194208) complex fu33 = (3.94588866140397, 0) complex fu40 = (1.77690860944722, 0) complex fu41 = (-1.46881047324958, 0) complex fu42 = (-1.46881047324958, 0) complex fu43 = (1.77690860944722, 0) complex fu50 = (3.94588866140397, 0) complex fu51 = (-1.85030181832271, -3.33862554194208) complex fu52 = (-1.85030181832271, 3.33862554194208) complex fu53 = (3.94588866140397, 0) complex fu60 = (2.46378306900086, 0) complex fu61 = (0, -2.25171645885873) complex fu62 = (0, 2.25171645885873) complex fu63 = (2.46378306900086, 0) complex fu70 = (3.94588866140397, 0) complex fu71 = (1.85030181832271, -3.33862554194208) complex fu72 = (1.85030181832271, 3.33862554194208) complex fu73 = (3.94588866140397, 0) complex vu00 = (-7.50400311432317, 0) complex vu01 = (-7.43707353330407, 0) complex vu02 = (-7.43707353330407, 0) complex vu03 = (-7.50400311432317, 0) complex vu10 = (-2.77930983550961, 0) complex vu11 = (-2.50794536109344, 0.659373359736633) complex vu12 = (-2.50794536109344, -0.659373359736633) complex vu13 = (-2.77930983550961, 0) complex vu20 = (-1.9390184119849, 0) complex vu21 = (0, 1.66126229175781) complex vu22 = (0, -1.66126229175781) complex vu23 = (-1.9390184119849, 0) complex vu30 = (-2.77930983550961, 0) complex vu31 = (2.50794536109346, 0.659373359736601) complex vu32 = (2.50794536109346, -0.659373359736601) complex vu33 = (-2.77930983550961, 0) complex vu40 = (-7.50400311432317, 0) complex vu41 = (7.43707353330408, 0) complex vu42 = (7.43707353330408, 0) complex vu43 = (-7.50400311432317, 0) complex vu50 = (-2.77930983550961, 0) complex vu51 = (2.50794536109343, -0.659373359736629) complex vu52 = (2.50794536109343, 0.659373359736629) complex vu53 = (-2.77930983550961, 0) complex vu60 = (-1.93901841198489, 0) complex vu61 = (0, -1.66126229175781) complex vu62 = (0, 1.66126229175781) complex vu63 = (-1.93901841198489, 0) complex vu70 = (-2.7793098355096, 0) complex vu71 = (-2.50794536109342, -0.659373359736614) complex vu72 = (-2.50794536109342, 0.659373359736614) complex vu73 = (-2.7793098355096, 0) complex umata = (1.42840693882772, 0.427063077513297) complex umatb = (-0.755537674043285, -0.807398339215268) complex umatc = (-0.755537674043285, 0.807398339215268) complex umatd = (1.42840693882772, -0.427063077513297) complex ffun = (0.768941951305078, 0.755734340081718) float ffnm = 0.1624061172 complex vfun = (0.921938510567301, 0.708458141083453) float vfnm = 0.3518835549 bool better = true complex t = 0 while better better = false t = (fu00*u + fu01)/(fu02*u + fu03) if |t| < |u| better = true u = t endif t = (fu10*u + fu11)/(fu12*u + fu13) if |u + ffun| < ffnm better = true u = t endif t = (fu20*u + fu21)/(fu22*u + fu23) if |t| < |u| better = true u = t endif t = (fu30*u + fu31)/(fu32*u + fu33) if |u - conj(ffun)| < ffnm better = true u = t endif t = (fu40*u + fu41)/(fu42*u + fu43) if |t| < |u| better = true u = t endif t = (fu50*u + fu51)/(fu52*u + fu53) if |u - ffun| < ffnm better = true u = t endif t = (fu60*u + fu61)/(fu62*u + fu63) if |t| < |u| better = true u = t endif t = (fu70*u + fu71)/(fu72*u + fu73) if |u + conj(ffun)| < ffnm better = true u = t endif endwhile complex v = (umata*u + umatb)/(umatc*u + umatd) better = true while better better = false t = (vu00*v + vu01)/(vu02*v + vu03) if |t| < |v| better = true v = t endif t = (vu10*v + vu11)/(vu12*v + vu13) if |v + conj(vfun)| < vfnm better = true v = t endif t = (vu20*v + vu21)/(vu22*v + vu23) if |t| < |v| better = true v = t endif t = (vu30*v + vu31)/(vu32*v + vu33) if |v - vfun| < vfnm better = true v = t endif t = (vu40*v + vu41)/(vu42*v + vu43) if |t| < |v| better = true v = t endif t = (vu50*v + vu51)/(vu52*v + vu53) if |v - conj(vfun)| < vfnm better = true v = t endif t = (vu60*v + vu61)/(vu62*v + vu63) if |t| < |v| better = true v = t endif t = (vu70*v + vu71)/(vu72*v + vu73) if |v + vfun| < vfnm better = true v = t endif endwhile if |v| > |u| complex uu = u*u complex sz = \ ((((((((((((((((((((((((((((((-107.899052277213*uu + \ 21.2770763932456)*uu + \ 123.557554926527)*uu + \ 34.878284584795)*uu + \ -76.1887474600412)*uu + \ -47.8814482909812)*uu + \ 23.8324277528302)*uu + \ 39.040519155879)*uu + \ 9.42171037859023)*uu + \ -20.5680212888404)*uu + \ -9.05777474767476)*uu + \ 10.8937051146504)*uu + \ 6.42065776554998)*uu + \ -11.3916063653235)*uu + \ -4.31250669769003)*uu + \ 7.23179734042934)*uu + \ 7.32151528876689)*uu + \ 0.0878771623009697)*uu + \ -10.4994277381963)*uu + \ -5.29496565656728)*uu + \ 12.4723716109794)*uu + \ 5.78113558762366)*uu + \ -3.09586518741821)*uu + \ -3.72979846852408)*uu + \ -2.8982466685946)*uu + \ 3.92669738155489)*uu + \ 3.80430717215926)*uu + \ -0.155685492779724)*uu + \ -2.46037116317731)*uu + \ 0.0386530703521177)*uu + \ 0.242336927686212)*uu + \ 0.337465527735398 complex nz = \ ((((-2.56824559038471*uu + \ -1.2753190607584)*uu + \ 3.16233893307257)*uu + \ 0.732072552064355)*uu + \ -0.532580346636843)*uu + \ 1 complex dz = \ ((((3.07009900368905*uu + \ 0.933171198790568)*uu + \ -3.43342914111542)*uu + \ -0.532580346636843)*uu + \ 1)*uu complex sw = \ (((((((((((((((((((((((((((((((3555.78069325637*uu + \ 9174.78283666175)*uu + \ 2029.07777370326)*uu + \ -4698.25741013124)*uu + \ -3929.32308893743)*uu + \ 1445.97750746116)*uu + \ 3006.04573970273)*uu + \ 59.8212021887664)*uu + \ -1518.62229340824)*uu + \ -463.990910157965)*uu + \ 642.572940061848)*uu + \ 415.053238113246)*uu + \ -327.893167847835)*uu + \ -384.802823768269)*uu + \ 209.843856335763)*uu + \ 359.094423662056)*uu + \ -67.3864301762284)*uu + \ -293.51734738998)*uu + \ -81.4170479138018)*uu + \ 126.072210900492)*uu + \ 154.131534422182)*uu + \ -24.4616407845213)*uu + \ -130.305391189651)*uu + \ -25.0401437192133)*uu + \ 53.8434666456734)*uu + \ 29.3142950063743)*uu + \ 0.0485141455730172)*uu + \ -22.0620261460773)*uu + \ -10.3383118018955)*uu + \ 6.77608111273922)*uu + \ 3.32101640138696)*uu + \ -0.315227932252338)*u complex nw = \ (((((((((((37.1640947580495*uu + \ 25.2366970146757)*uu + \ -79.2348889251695)*uu + \ -39.336002799837)*uu + \ 72.769261866207)*uu + \ 15.4988717415633)*uu + \ -45.2051250201327)*uu + \ 4.79811103250217)*uu + \ 26.875698337622)*uu + \ -4.36895133682953)*uu + \ -11.8635126784192)*uu + \ -0.487787046566006)*uu + \ 1 complex dw = \ ((((((((((-16.5150902671358*uu + \ -12.5496006514766)*uu + \ 43.3130286369739)*uu + \ 28.0695603199555)*uu + \ -47.3063360019564)*uu + \ -23.8657389027764)*uu + \ 26.998716697107)*uu + \ 9.14288441064084)*uu + \ -8.05174442974391)*uu + \ -1.33145086659211)*uu + \ 1)*uu*uu*u else complex vv = v*v complex sz = \ ((((((((((((((((((((((((((((((-62.4142684201291*vv + \ -24.4501359821071)*vv + \ 24.9667464256093)*vv + \ 55.9134526879858)*vv + \ 0.861712635046834)*vv + \ -44.1996662928199)*vv + \ -31.0932383175414)*vv + \ 16.5587830761816)*vv + \ 21.3477545172581)*vv + \ 9.15209897860366)*vv + \ -11.816269085359)*vv + \ -14.1189260861883)*vv + \ 2.25234505972364)*vv + \ 17.1917759703915)*vv + \ 0.959639718089691)*vv + \ -6.18554879409297)*vv + \ -10.0756614899533)*vv + \ -0.170923360334278)*vv + \ 5.48048121957309)*vv + \ 7.38528123614971)*vv + \ -3.20728461877661)*vv + \ -3.74427890637652)*vv + \ -0.946307781751826)*vv + \ 0.791698298683063)*vv + \ -0.133793544014046)*vv + \ 0.974006735151753)*vv + \ -2.81024562545752)*vv + \ -0.178804017105037)*vv + \ 1.85856061196747)*vv + \ 1.20293852755071)*vv + \ 0.23875336908879)*vv + \ 1.25680374453813 complex nz = \ (((((((-32.1646494392229*vv + \ 67.0799646778823)*vv + \ -31.1827814288078)*vv + \ 5.78887758712353)*vv + \ -35.94865920118)*vv + \ 17.7836740854269)*vv + \ 23.3043764521405)*vv + \ -15.3348776972945)*vv complex dz = \ (((((((16.8395759388293*vv + \ -36.299982458833)*vv + \ 17.9611398639406)*vv + \ 1.97417157772669)*vv + \ 7.9776240015738)*vv + \ -8.85768229233788)*vv + \ -0.389287734944832)*vv + \ 0.06051432707662)*vv + \ 1 complex sw = \ (((((((((((((((((((((((((((((((-4588.39425946336*vv + \ -638.028878742982)*vv + \ 2926.6271307215)*vv + \ 2152.42986111644)*vv + \ -1133.18980867301)*vv + \ -1770.43568957182)*vv + \ -326.336065212859)*vv + \ 996.624479004599)*vv + \ 893.114143000207)*vv + \ -42.4102681844128)*vv + \ -826.16752834257)*vv + \ -290.915857805946)*vv + \ 279.471671930001)*vv + \ 304.282599876931)*vv + \ -20.0082437613319)*vv + \ -155.862003016844)*vv + \ -143.314264270139)*vv + \ 77.2973695495412)*vv + \ 131.155409882033)*vv + \ 24.7131392048309)*vv + \ -74.9750389466605)*vv + \ -28.5833919478334)*vv + \ -8.81570321911416)*vv + \ 30.7433882288918)*vv + \ 16.2933118995542)*vv + \ -7.7092253784646)*vv + \ -13.2179549391542)*vv + \ 5.08259886063704)*vv + \ 0.655017515069468)*vv + \ -0.322521671055053)*vv + \ -0.434957426348914)*vv + \ -1.71590514351575)*v complex nw = \ (((((((((((((((((((-1828.72142791126*vv + \ 12560.4666412313)*vv + \ -34496.9609357505)*vv + \ 47614.274908282)*vv + \ -34314.4635749314)*vv + \ 16600.6038334992)*vv + \ -17194.056110468)*vv + \ 18214.4803937559)*vv + \ -5825.9381730092)*vv + \ -4217.19020198348)*vv + \ 2925.71204970639)*vv + \ 1726.73491114304)*vv + \ -1332.45112129072)*vv + \ -5073.25506475846)*vv + \ 9750.30323439105)*vv + \ -7196.76526038431)*vv + \ 2084.68379613108)*vv + \ 254.292308376439)*vv + \ -310.093045112662)*vv + \ 58.4753135277179)*v complex dw = \ (((((((((((((((((((1163.6647447058*vv + \ -6271.09167924206)*vv + \ 13241.559785214)*vv + \ -13334.6283268819)*vv + \ 7183.05738965072)*vv + \ -6214.10795044865)*vv + \ 9142.28222037823)*vv + \ -6189.68943816696)*vv + \ 1558.40968010435)*vv + \ -1798.44406773222)*vv + \ 2292.32500964001)*vv + \ -644.465585190844)*vv + \ 25.8275654912191)*vv + \ -351.701784979822)*vv + \ 181.215008149509)*vv + \ 19.6546841043565)*vv + \ 18.216807213465)*vv + \ -22.2324770500086)*vv + \ -0.966353117772193)*vv + \ 0.151285817691546)*vv + \ 1 endif sz = 0.0236200184650903*(sz + nz/dz) sw = 8.57433765636572e-005*(sw + nw/dw) sz = sz - 0.2345841323737324 sw = 45.8105095272213*sw sw = sw/(sz*sqr(sz)) complex s = 1/sz + 4.2940434292888333 if @radical complex qrad = sqrt(((((sqr(s) - 30)*s + 54)*s - 15)*s - 18)*s + 9) if |sw - qrad| < |sw + qrad| sw = qrad else sw = -qrad endif endif t = ((5*sqr(s) - 3)*s + 3 + sw)/(6*sqr(s)) complex a0 = s complex a2 = -1.5*t complex p = (t - a0)/(1 + a2) z = t loop: z = (z + a2)*sqr(z)*p + a0 bailout: |z| <= @bailout default: title = "Disct1001" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param hypcent caption = "Hyperbolic Translation" default = (1,1) hint = "Move the origin around by a horizontal move followed \ by vertical move. (1, 4.715499527859587), (1, 1), \ (3.245719082696797, 1), (14.94107664762724, 4.715499527859587) \ center 4 of 6 Weierstrass points." endparam param radical caption = "Radical" default = false hint = "From a purist standpoint this is unnecessary. It helps \ coherence on zooms deeper than 1e8." endparam param bailout caption = "Bailout value" default = 128000000.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jisct1001" seed = #pixel hypcent = hypcent radical = radical bailout = bailout } Jisct1001 { ; Generic Mandelbrot set init: complex u = @seed float hr = real(@hypcent) float hi = imag(@hypcent) u = ((hr + 1)*u + (hr - 1))/((hr - 1)*u + (hr + 1)) u = ((hi + 1)*u + flip(hi - 1))/(-flip(hi - 1)*u + (hi + 1)) if |u| > 1 u = 1/u endif complex fu00 = (1.77690860944722, 0) complex fu01 = (1.46881047324958, 0) complex fu02 = (1.46881047324958, 0) complex fu03 = (1.77690860944722, 0) complex fu10 = (3.94588866140397, 0) complex fu11 = (1.85030181832271, 3.33862554194208) complex fu12 = (1.85030181832271, -3.33862554194208) complex fu13 = (3.94588866140397, 0) complex fu20 = (2.46378306900086, 0) complex fu21 = (0, 2.25171645885873) complex fu22 = (0, -2.25171645885873) complex fu23 = (2.46378306900086, 0) complex fu30 = (3.94588866140397, 0) complex fu31 = (-1.85030181832271, 3.33862554194208) complex fu32 = (-1.85030181832271, -3.33862554194208) complex fu33 = (3.94588866140397, 0) complex fu40 = (1.77690860944722, 0) complex fu41 = (-1.46881047324958, 0) complex fu42 = (-1.46881047324958, 0) complex fu43 = (1.77690860944722, 0) complex fu50 = (3.94588866140397, 0) complex fu51 = (-1.85030181832271, -3.33862554194208) complex fu52 = (-1.85030181832271, 3.33862554194208) complex fu53 = (3.94588866140397, 0) complex fu60 = (2.46378306900086, 0) complex fu61 = (0, -2.25171645885873) complex fu62 = (0, 2.25171645885873) complex fu63 = (2.46378306900086, 0) complex fu70 = (3.94588866140397, 0) complex fu71 = (1.85030181832271, -3.33862554194208) complex fu72 = (1.85030181832271, 3.33862554194208) complex fu73 = (3.94588866140397, 0) complex vu00 = (-7.50400311432317, 0) complex vu01 = (-7.43707353330407, 0) complex vu02 = (-7.43707353330407, 0) complex vu03 = (-7.50400311432317, 0) complex vu10 = (-2.77930983550961, 0) complex vu11 = (-2.50794536109344, 0.659373359736633) complex vu12 = (-2.50794536109344, -0.659373359736633) complex vu13 = (-2.77930983550961, 0) complex vu20 = (-1.9390184119849, 0) complex vu21 = (0, 1.66126229175781) complex vu22 = (0, -1.66126229175781) complex vu23 = (-1.9390184119849, 0) complex vu30 = (-2.77930983550961, 0) complex vu31 = (2.50794536109346, 0.659373359736601) complex vu32 = (2.50794536109346, -0.659373359736601) complex vu33 = (-2.77930983550961, 0) complex vu40 = (-7.50400311432317, 0) complex vu41 = (7.43707353330408, 0) complex vu42 = (7.43707353330408, 0) complex vu43 = (-7.50400311432317, 0) complex vu50 = (-2.77930983550961, 0) complex vu51 = (2.50794536109343, -0.659373359736629) complex vu52 = (2.50794536109343, 0.659373359736629) complex vu53 = (-2.77930983550961, 0) complex vu60 = (-1.93901841198489, 0) complex vu61 = (0, -1.66126229175781) complex vu62 = (0, 1.66126229175781) complex vu63 = (-1.93901841198489, 0) complex vu70 = (-2.7793098355096, 0) complex vu71 = (-2.50794536109342, -0.659373359736614) complex vu72 = (-2.50794536109342, 0.659373359736614) complex vu73 = (-2.7793098355096, 0) complex umata = (1.42840693882772, 0.427063077513297) complex umatb = (-0.755537674043285, -0.807398339215268) complex umatc = (-0.755537674043285, 0.807398339215268) complex umatd = (1.42840693882772, -0.427063077513297) complex ffun = (0.768941951305078, 0.755734340081718) float ffnm = 0.1624061172 complex vfun = (0.921938510567301, 0.708458141083453) float vfnm = 0.3518835549 bool better = true complex t = 0 while better better = false t = (fu00*u + fu01)/(fu02*u + fu03) if |t| < |u| better = true u = t endif t = (fu10*u + fu11)/(fu12*u + fu13) if |u + ffun| < ffnm better = true u = t endif t = (fu20*u + fu21)/(fu22*u + fu23) if |t| < |u| better = true u = t endif t = (fu30*u + fu31)/(fu32*u + fu33) if |u - conj(ffun)| < ffnm better = true u = t endif t = (fu40*u + fu41)/(fu42*u + fu43) if |t| < |u| better = true u = t endif t = (fu50*u + fu51)/(fu52*u + fu53) if |u - ffun| < ffnm better = true u = t endif t = (fu60*u + fu61)/(fu62*u + fu63) if |t| < |u| better = true u = t endif t = (fu70*u + fu71)/(fu72*u + fu73) if |u + conj(ffun)| < ffnm better = true u = t endif endwhile complex v = (umata*u + umatb)/(umatc*u + umatd) better = true while better better = false t = (vu00*v + vu01)/(vu02*v + vu03) if |t| < |v| better = true v = t endif t = (vu10*v + vu11)/(vu12*v + vu13) if |v + conj(vfun)| < vfnm better = true v = t endif t = (vu20*v + vu21)/(vu22*v + vu23) if |t| < |v| better = true v = t endif t = (vu30*v + vu31)/(vu32*v + vu33) if |v - vfun| < vfnm better = true v = t endif t = (vu40*v + vu41)/(vu42*v + vu43) if |t| < |v| better = true v = t endif t = (vu50*v + vu51)/(vu52*v + vu53) if |v - conj(vfun)| < vfnm better = true v = t endif t = (vu60*v + vu61)/(vu62*v + vu63) if |t| < |v| better = true v = t endif t = (vu70*v + vu71)/(vu72*v + vu73) if |v + vfun| < vfnm better = true v = t endif endwhile if |v| > |u| complex uu = u*u complex sz = \ ((((((((((((((((((((((((((((((-107.899052277213*uu + \ 21.2770763932456)*uu + \ 123.557554926527)*uu + \ 34.878284584795)*uu + \ -76.1887474600412)*uu + \ -47.8814482909812)*uu + \ 23.8324277528302)*uu + \ 39.040519155879)*uu + \ 9.42171037859023)*uu + \ -20.5680212888404)*uu + \ -9.05777474767476)*uu + \ 10.8937051146504)*uu + \ 6.42065776554998)*uu + \ -11.3916063653235)*uu + \ -4.31250669769003)*uu + \ 7.23179734042934)*uu + \ 7.32151528876689)*uu + \ 0.0878771623009697)*uu + \ -10.4994277381963)*uu + \ -5.29496565656728)*uu + \ 12.4723716109794)*uu + \ 5.78113558762366)*uu + \ -3.09586518741821)*uu + \ -3.72979846852408)*uu + \ -2.8982466685946)*uu + \ 3.92669738155489)*uu + \ 3.80430717215926)*uu + \ -0.155685492779724)*uu + \ -2.46037116317731)*uu + \ 0.0386530703521177)*uu + \ 0.242336927686212)*uu + \ 0.337465527735398 complex nz = \ ((((-2.56824559038471*uu + \ -1.2753190607584)*uu + \ 3.16233893307257)*uu + \ 0.732072552064355)*uu + \ -0.532580346636843)*uu + \ 1 complex dz = \ ((((3.07009900368905*uu + \ 0.933171198790568)*uu + \ -3.43342914111542)*uu + \ -0.532580346636843)*uu + \ 1)*uu complex sw = \ (((((((((((((((((((((((((((((((3555.78069325637*uu + \ 9174.78283666175)*uu + \ 2029.07777370326)*uu + \ -4698.25741013124)*uu + \ -3929.32308893743)*uu + \ 1445.97750746116)*uu + \ 3006.04573970273)*uu + \ 59.8212021887664)*uu + \ -1518.62229340824)*uu + \ -463.990910157965)*uu + \ 642.572940061848)*uu + \ 415.053238113246)*uu + \ -327.893167847835)*uu + \ -384.802823768269)*uu + \ 209.843856335763)*uu + \ 359.094423662056)*uu + \ -67.3864301762284)*uu + \ -293.51734738998)*uu + \ -81.4170479138018)*uu + \ 126.072210900492)*uu + \ 154.131534422182)*uu + \ -24.4616407845213)*uu + \ -130.305391189651)*uu + \ -25.0401437192133)*uu + \ 53.8434666456734)*uu + \ 29.3142950063743)*uu + \ 0.0485141455730172)*uu + \ -22.0620261460773)*uu + \ -10.3383118018955)*uu + \ 6.77608111273922)*uu + \ 3.32101640138696)*uu + \ -0.315227932252338)*u complex nw = \ (((((((((((37.1640947580495*uu + \ 25.2366970146757)*uu + \ -79.2348889251695)*uu + \ -39.336002799837)*uu + \ 72.769261866207)*uu + \ 15.4988717415633)*uu + \ -45.2051250201327)*uu + \ 4.79811103250217)*uu + \ 26.875698337622)*uu + \ -4.36895133682953)*uu + \ -11.8635126784192)*uu + \ -0.487787046566006)*uu + \ 1 complex dw = \ ((((((((((-16.5150902671358*uu + \ -12.5496006514766)*uu + \ 43.3130286369739)*uu + \ 28.0695603199555)*uu + \ -47.3063360019564)*uu + \ -23.8657389027764)*uu + \ 26.998716697107)*uu + \ 9.14288441064084)*uu + \ -8.05174442974391)*uu + \ -1.33145086659211)*uu + \ 1)*uu*uu*u else complex vv = v*v complex sz = \ ((((((((((((((((((((((((((((((-62.4142684201291*vv + \ -24.4501359821071)*vv + \ 24.9667464256093)*vv + \ 55.9134526879858)*vv + \ 0.861712635046834)*vv + \ -44.1996662928199)*vv + \ -31.0932383175414)*vv + \ 16.5587830761816)*vv + \ 21.3477545172581)*vv + \ 9.15209897860366)*vv + \ -11.816269085359)*vv + \ -14.1189260861883)*vv + \ 2.25234505972364)*vv + \ 17.1917759703915)*vv + \ 0.959639718089691)*vv + \ -6.18554879409297)*vv + \ -10.0756614899533)*vv + \ -0.170923360334278)*vv + \ 5.48048121957309)*vv + \ 7.38528123614971)*vv + \ -3.20728461877661)*vv + \ -3.74427890637652)*vv + \ -0.946307781751826)*vv + \ 0.791698298683063)*vv + \ -0.133793544014046)*vv + \ 0.974006735151753)*vv + \ -2.81024562545752)*vv + \ -0.178804017105037)*vv + \ 1.85856061196747)*vv + \ 1.20293852755071)*vv + \ 0.23875336908879)*vv + \ 1.25680374453813 complex nz = \ (((((((-32.1646494392229*vv + \ 67.0799646778823)*vv + \ -31.1827814288078)*vv + \ 5.78887758712353)*vv + \ -35.94865920118)*vv + \ 17.7836740854269)*vv + \ 23.3043764521405)*vv + \ -15.3348776972945)*vv complex dz = \ (((((((16.8395759388293*vv + \ -36.299982458833)*vv + \ 17.9611398639406)*vv + \ 1.97417157772669)*vv + \ 7.9776240015738)*vv + \ -8.85768229233788)*vv + \ -0.389287734944832)*vv + \ 0.06051432707662)*vv + \ 1 complex sw = \ (((((((((((((((((((((((((((((((-4588.39425946336*vv + \ -638.028878742982)*vv + \ 2926.6271307215)*vv + \ 2152.42986111644)*vv + \ -1133.18980867301)*vv + \ -1770.43568957182)*vv + \ -326.336065212859)*vv + \ 996.624479004599)*vv + \ 893.114143000207)*vv + \ -42.4102681844128)*vv + \ -826.16752834257)*vv + \ -290.915857805946)*vv + \ 279.471671930001)*vv + \ 304.282599876931)*vv + \ -20.0082437613319)*vv + \ -155.862003016844)*vv + \ -143.314264270139)*vv + \ 77.2973695495412)*vv + \ 131.155409882033)*vv + \ 24.7131392048309)*vv + \ -74.9750389466605)*vv + \ -28.5833919478334)*vv + \ -8.81570321911416)*vv + \ 30.7433882288918)*vv + \ 16.2933118995542)*vv + \ -7.7092253784646)*vv + \ -13.2179549391542)*vv + \ 5.08259886063704)*vv + \ 0.655017515069468)*vv + \ -0.322521671055053)*vv + \ -0.434957426348914)*vv + \ -1.71590514351575)*v complex nw = \ (((((((((((((((((((-1828.72142791126*vv + \ 12560.4666412313)*vv + \ -34496.9609357505)*vv + \ 47614.274908282)*vv + \ -34314.4635749314)*vv + \ 16600.6038334992)*vv + \ -17194.056110468)*vv + \ 18214.4803937559)*vv + \ -5825.9381730092)*vv + \ -4217.19020198348)*vv + \ 2925.71204970639)*vv + \ 1726.73491114304)*vv + \ -1332.45112129072)*vv + \ -5073.25506475846)*vv + \ 9750.30323439105)*vv + \ -7196.76526038431)*vv + \ 2084.68379613108)*vv + \ 254.292308376439)*vv + \ -310.093045112662)*vv + \ 58.4753135277179)*v complex dw = \ (((((((((((((((((((1163.6647447058*vv + \ -6271.09167924206)*vv + \ 13241.559785214)*vv + \ -13334.6283268819)*vv + \ 7183.05738965072)*vv + \ -6214.10795044865)*vv + \ 9142.28222037823)*vv + \ -6189.68943816696)*vv + \ 1558.40968010435)*vv + \ -1798.44406773222)*vv + \ 2292.32500964001)*vv + \ -644.465585190844)*vv + \ 25.8275654912191)*vv + \ -351.701784979822)*vv + \ 181.215008149509)*vv + \ 19.6546841043565)*vv + \ 18.216807213465)*vv + \ -22.2324770500086)*vv + \ -0.966353117772193)*vv + \ 0.151285817691546)*vv + \ 1 endif sz = 0.0236200184650903*(sz + nz/dz) sw = 8.57433765636572e-005*(sw + nw/dw) sz = sz - 0.2345841323737324 sw = 45.8105095272213*sw sw = sw/(sz*sqr(sz)) complex s = 1/sz + 4.2940434292888333 if @radical complex qrad = sqrt(((((sqr(s) - 30)*s + 54)*s - 15)*s - 18)*s + 9) if |sw - qrad| < |sw + qrad| sw = qrad else sw = -qrad endif endif t = ((5*sqr(s) - 3)*s + 3 + sw)/(6*sqr(s)) complex a0 = s complex a2 = -1.5*t complex p = (t - a0)/(1 + a2) z = #pixel loop: z = (z + a2)*sqr(z)*p + a0 bailout: |z| <= @bailout default: title = "Jisct1001" center = (0, 0) param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param hypcent caption = "Hyperbolic Translation" default = (1,1) hint = "Move the origin around by a horizontal move followed \ by vertical move. (1, 4.715499527859587), (1, 1), \ (3.245719082696797, 1), (14.94107664762724, 4.715499527859587) \ center 4 of 6 Weierstrass points." endparam param radical caption = "Radical" default = false hint = "From a purist standpoint this is unnecessary. It helps \ coherence on zooms deeper than 1e8." endparam param bailout caption = "Bailout value" default = 128000000.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Disct1001" hypcent = hypcent radical = radical bailout = bailout } Trail1001 { ; Generic Mandelbrot set init: complex u = 1/#pixel complex t = u if @unwrap || @unwrap3 complex z0 = 1/(-0.396605040933576095, -0.360564887026954119) complex z1 = 1/(-0.396605040933576095, 0.360564887026954119) complex z2 = 1/(0.160623225673253248, 0) complex z3 = 1/(0.767119262655986455, 0) complex z4 = 1/(1.16021692001170013, 0) complex z5 = 1/(2.70525067352621236, 0) if @br0 == 0 complex root0 = z0 elseif @br0 == 1 complex root0 = z1 elseif @br0 == 2 complex root0 = z2 elseif @br0 == 3 complex root0 = z3 elseif @br0 == 4 complex root0 = z4 else complex root0 = z5 endif if @br1 == 0 complex root1 = z0 elseif @br1 == 1 complex root1 = z1 elseif @br1 == 2 complex root1 = z2 elseif @br1 == 3 complex root1 = z3 elseif @br1 == 4 complex root1 = z4 else complex root1 = z5 endif if @br2 == 0 complex root2 = z0 elseif @br2 == 1 complex root2 = z1 elseif @br2 == 2 complex root2 = z2 elseif @br2 == 3 complex root2 = z3 elseif @br2 == 4 complex root2 = z4 else complex root2 = z5 endif t = 1 if @unwrap3 complex m = (root0 + root1 - 2*root2)/2 complex n = sqr(root0 - root1)/16 t = u + (4*n - sqr(m))/(16*u) u = u - (4*n - sqr(m))/(16*u) - 0.5*m endif t = (u - sqr(root0 - root1)/(16*u))*t u = u + sqr(root0 - root1)/(16*u) + 0.5*(root0 + root1) endif complex a = 1/3 - u/2 complex b = 1/2 - u complex c = (u^3)/3 - (u^3)/2 complex d = (u^2)/2 - (u^2) complex qa = a*d - b*c complex qb = d - b - c if @unwrap3 complex qrad = (sqr(qb) + 4*qa)/(sqr(@branchcut)*sqr(u)*sqr(t)) complex p4 = (sqrt(qrad)*@branchcut*u*t - qb)/(2*qa) else complex qrad = (sqr(qb) + 4*qa)/(sqr(@branchcut)*(u^4)*sqr(t)) complex p4 = (sqrt(qrad)*@branchcut*(u^2)*t - qb)/(2*qa) endif complex p = p4^(1/2) complex q = p*(1 + c*p4)/(d*p4) complex r = u*p complex a3 = 0.3333333333333333333 complex a2 = -0.5*(q + r) complex a1 = q*r z = q if @showbranch && (real(qrad) < -10*abs(imag(qrad))) z = 1e15 endif loop: z = ((a3*z + a2)*z + a1)*z + p bailout: |z| <= @bailout default: title = "Trail1001" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this parametization. Use (-1,0) \ to see the other sheet." endparam param unwrap caption = "Unwrap" default = false hint = "There are six branch points to this parametization. This \ unwraps two and duplicates the rest." endparam param unwrap3 caption = "Unwrap3" default = false hint = "There are six branch points to this parametization. This \ unwraps three and quadruples the rest." endparam param showbranch caption = "Show branches" default = false hint = "There are six branch points to this parametization. This \ unwraps two and duplicates the rest." endparam param br0 caption = "Unwrap Point" default = 0 min = 0 max = 5 hint = "Choice of branch point to unwrap. Make two choices \ different." endparam param br1 caption = "Unwrap Point" default = 1 min = 0 max = 5 hint = "Choice of branch point to unwrap. Make two choices \ different." endparam param br2 caption = "Unwrap Point 3" default = 2 min = 0 max = 5 hint = "Choice of branch point to unwrap. Make third choice \ different." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jrail1001" seed = #pixel branchcut = branchcut unwrap = unwrap unwrap3 = unwrap3 br0 = br0 br1 = br1 br2 = br2 bailout = bailout } Jrail1001 { ; Generic Julia set init: complex u = 1/@seed complex t = u if @unwrap || @unwrap3 complex z0 = 1/(-0.396605040933576095, -0.360564887026954119) complex z1 = 1/(-0.396605040933576095, 0.360564887026954119) complex z2 = 1/(0.160623225673253248, 0) complex z3 = 1/(0.767119262655986455, 0) complex z4 = 1/(1.16021692001170013, 0) complex z5 = 1/(2.70525067352621236, 0) if @br0 == 0 complex root0 = z0 elseif @br0 == 1 complex root0 = z1 elseif @br0 == 2 complex root0 = z2 elseif @br0 == 3 complex root0 = z3 elseif @br0 == 4 complex root0 = z4 else complex root0 = z5 endif if @br1 == 0 complex root1 = z0 elseif @br1 == 1 complex root1 = z1 elseif @br1 == 2 complex root1 = z2 elseif @br1 == 3 complex root1 = z3 elseif @br1 == 4 complex root1 = z4 else complex root1 = z5 endif if @br2 == 0 complex root2 = z0 elseif @br2 == 1 complex root2 = z1 elseif @br2 == 2 complex root2 = z2 elseif @br2 == 3 complex root2 = z3 elseif @br2 == 4 complex root2 = z4 else complex root2 = z5 endif t = 1 if @unwrap3 complex m = (root0 + root1 - 2*root2)/2 complex n = sqr(root0 - root1)/16 t = u + (4*n - sqr(m))/(16*u) u = u - (4*n - sqr(m))/(16*u) - 0.5*m endif t = (u - sqr(root0 - root1)/(16*u))*t u = u + sqr(root0 - root1)/(16*u) + 0.5*(root0 + root1) endif complex a = 1/3 - u/2 complex b = 1/2 - u complex c = (u^3)/3 - (u^3)/2 complex d = (u^2)/2 - (u^2) complex qa = a*d - b*c complex qb = d - b - c if @unwrap3 complex qrad = (sqr(qb) + 4*qa)/(sqr(@branchcut)*sqr(u)*sqr(t)) complex p4 = (sqrt(qrad)*@branchcut*u*t - qb)/(2*qa) else complex qrad = (sqr(qb) + 4*qa)/(sqr(@branchcut)*(u^4)*sqr(t)) complex p4 = (sqrt(qrad)*@branchcut*(u^2)*t - qb)/(2*qa) endif complex p = p4^(1/2) complex q = p*(1 + c*p4)/(d*p4) complex r = u*p complex a3 = 0.3333333333333333333 complex a2 = -0.5*(q + r) complex a1 = q*r z = 2*#pixel loop: z = ((a3*z + a2)*z + a1)*z + p bailout: |z| <= @bailout default: title = "Jrail1001" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param unwrap caption = "Unwrap" default = false hint = "There are six branch points to this parametization. This \ unwraps two and duplicates the rest." endparam param unwrap3 caption = "Unwrap3" default = false hint = "There are six branch points to this parametization. This \ unwraps three and quadruples the rest." endparam param showbranch caption = "Show branches" default = false hint = "There are six branch points to this parametization. This \ unwraps two and duplicates the rest." endparam param br0 caption = "Unwrap Point" default = 0 min = 0 max = 5 hint = "Choice of branch point to unwrap. Make two choices \ different." endparam param br1 caption = "Unwrap Point" default = 1 min = 0 max = 5 hint = "Choice of branch point to unwrap. Make two choices \ different." endparam param br2 caption = "Unwrap Point 3" default = 2 min = 0 max = 5 hint = "Choice of branch point to unwrap. Make third choice \ different." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Trail1001" branchcut = branchcut bailout = bailout } Step2to1 { ; Generic Mandelbrot set init: complex pix3 = #pixel*#pixel*#pixel complex p = #pixel*(1 + 0.25*pix3)/(1 + 0.3333333333333333333*pix3) complex a3 = -0.3333333333333333333*p z = p loop: z = (0.25*z + a3)*z*sqr(z) + #pixel bailout: |z| <= @bailout default: title = "Step2to1" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jtep2to1" seed = #pixel power = power bailout = bailout } Jtep2to1 { ; Generic Julia set init: complex pix3 = @seed*@seed*@seed complex p = @seed*(1 + 0.25*pix3)/(1 + 0.3333333333333333333*pix3) complex a3 = -0.3333333333333333333*p z = #pixel loop: z = (0.25*z + a3)*z*sqr(z) + @seed bailout: |z| <= @bailout default: title = "Jtep2to1" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Step2to1" power = power bailout = bailout } Vtrail { ; Generic Mandelbrot set init: complex psq = sqr(#pixel) complex a2 = -0.5*psq complex a0 = #pixel z = a0 loop: z = (0.25*sqr(z) + a2)*sqr(z) + a0 bailout: |z| <= @bailout default: title = "Vtrail" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Vjrail" seed = #pixel power = power bailout = bailout } Vjrail { ; Generic Julia set init: complex psq = sqr(@seed) complex a2 = -0.5*psq complex a0 = @seed z = #pixel loop: z = (0.25*sqr(z) + a2)*sqr(z) + a0 bailout: |z| <= @bailout default: title = "Vjrail" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Vtrail" power = power bailout = bailout } Meet21 { ; Generic Mandelbrot set init: complex a3 = 0.3333333333333333333*#pixel*(1 + flip(sqrt(2))) z = #pixel loop: z = (0.25*z + a3)*z*sqr(z) + #pixel bailout: |z| <= @bailout default: title = "Meet21" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jeet21" seed = #pixel power = power bailout = bailout } Jeet21 { ; Generic Julia set init: complex a3 = 0.3333333333333333333*@seed*(1 + flip(sqrt(2))) z = #pixel loop: z = (0.25*z + a3)*z*sqr(z) + @seed bailout: |z| <= @bailout default: title = "Jeet21" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Meet21" power = power bailout = bailout } Twostep { ; Generic Mandelbrot set init: complex pix2 = #pixel*#pixel complex q = #pixel*(6 + 2*pix2)/(6 + 3*pix2) complex a3 = 0.3333333333333333333 complex a2 = -0.5*q z = q loop: z = (a3*z + a2)*sqr(z) + #pixel bailout: |z| <= @bailout default: title = "Twostep" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jwostep" seed = #pixel power = power bailout = bailout } Jwostep { ; Generic Julia set init: complex pix2 = @seed*@seed complex q = @seed*(6 + 2*pix2)/(6 + 3*pix2) complex a3 = 0.3333333333333333333 complex a2 = -0.5*q z = #pixel loop: z = (a3*z + a2)*sqr(z) + @seed bailout: |z| <= @bailout default: title = "Jwostep" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Twostep" power = power bailout = bailout } Meet10_10_0 { ; Generic Mandelbrot set init: complex st = #pixel if @insout st = 1/st endif complex sqst = sqrt(sqr(st) - 0.33333333333333333333) complex s = sqst + st complex t = sqst - st complex a3 = 0.33333333333333333333 complex a2 = -0.5*(s + t) complex a1 = -0.33333333333333333333 complex q = ((a3*s + a2)*s + a1)*s complex r = ((a3*t + a2)*t + a1)*t complex pn2 = 2/(q - r) complex u = 1 - q*pn2 complex p = sqrt(pn2) a2 = a2*p a1 = a1*pn2 complex a0 = u*p z = p loop: z = ((a3*z + a2)*z + a1)*z + a0 bailout: |z| <= @bailout default: title = "Meet10_10_0" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jeet10_10_0" seed = #pixel power = power insout = insout bailout = bailout } Jeet10_10_0 { ; Generic Julia set init: complex st = @seed if @insout st = 1/st endif complex sqst = sqrt(sqr(st) - 0.33333333333333333333) complex s = sqst + st complex t = sqst - st complex a3 = 0.33333333333333333333 complex a2 = -0.5*(s + t) complex a1 = -0.33333333333333333333 complex q = ((a3*s + a2)*s + a1)*s complex r = ((a3*t + a2)*t + a1)*t complex pn2 = 2/(q - r) complex u = 1 - q*pn2 complex p = sqrt(pn2) a2 = a2*p a1 = a1*pn2 complex a0 = u*p z = 2*#pixel loop: z = ((a3*z + a2)*z + a1)*z + a0 bailout: |z| <= @bailout default: title = "Jeet10_10_0" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Meet10_10_0" power = power bailout = bailout } Meet100_1_0 { ; Generic Mandelbrot set init: complex u = 1/#pixel - 1 complex uu = sqr(u) complex u3i = 1/((2*u - 3)*uu + 1) complex s = ((2*uu - 3*u)*uu + 1.5)*u3i complex p = sqrt((9 - 6*u)*u3i) complex a3 = 0.3333333333333333333 complex a2 = -0.5*p complex a0 = s*p z = a0 loop: z = (a3*z + a2)*sqr(z) + a0 bailout: |z| <= @bailout default: title = "Meet100_1_0" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jeet100_1_0" seed = #pixel power = power bailout = bailout } Jeet100_1_0 { ; Generic Julia set init: complex u = 1/@seed - 1 complex uu = sqr(u) complex u3i = 1/((2*u - 3)*uu + 1) complex s = ((2*uu - 3*u)*uu + 1.5)*u3i complex p = sqrt((9 - 6*u)*u3i) complex a3 = 0.3333333333333333333 complex a2 = -0.5*p complex a0 = s*p z = #pixel*2 loop: z = (a3*z + a2)*sqr(z) + a0 bailout: |z| <= @bailout default: title = "Jeet100_1_0" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Meet100_1_0" power = power bailout = bailout } Meet111_n_0 { ; Generic Mandelbrot set init: complex u = #pixel complex an4 = 1/(@n + 4) complex an3 = 1/(@n + 3) complex an2 = 1/(@n + 2) complex an1 = 1/(@n + 1) complex t = (an2*an3*u - an3*an4)/(an1*an2*u - an2*an3) an3 = -(1 + u + t)*an3 an2 = (u + t + u*t)*an2 an1 = -u*t*an1 complex un1 = u^(@n + 1) complex tn1 = t^(@n + 1) complex m = (((an4*u + an3)*u + an2)*u + an1)*un1 complex l = (((an4*t + an3)*t + an2)*t + an1)*tn1 if @swap1_n complex s = l*t/(l - m) else complex s = (l*t - m)/(l - m) endif complex p = ((t - s)/m)^(1/(@n + 3)) an3 = an3*p an2 = an2*p*p an1 = an1*p*p*p complex a0 = s*p z = a0 loop: z = (((an4*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Meet111_n_0" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param swap1_n caption = "Swap1_n" default = false hint = "Converts this to a Merge11n_1_0" endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jeet111_n_0" seed = #pixel power = power n = n swap1_n = swap1_n bailout = bailout } Jeet111_n_0 { ; Generic Julia set init: complex u = @seed complex an4 = 1/(@n + 4) complex an3 = 1/(@n + 3) complex an2 = 1/(@n + 2) complex an1 = 1/(@n + 1) complex t = (an2*an3*u - an3*an4)/(an1*an2*u - an2*an3) an3 = -(1 + u + t)*an3 an2 = (u + t + u*t)*an2 an1 = -u*t*an1 complex un1 = u^(@n + 1) complex tn1 = t^(@n + 1) complex m = (((an4*u + an3)*u + an2)*u + an1)*un1 complex l = (((an4*t + an3)*t + an2)*t + an1)*tn1 if @swap1_n complex s = l*t/(l - m) else complex s = (l*t - m)/(l - m) endif complex p = ((t - s)/m)^(1/(@n + 3)) an3 = an3*p an2 = an2*p*p an1 = an1*p*p*p complex a0 = s*p z = #pixel*2 loop: z = (((an4*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Jeet111_n_0" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param swap1_n caption = "Swap1_n" default = false hint = "Converts this to a Merge11n_1_0" endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Meet111_n_0" power = power bailout = bailout } Meet100_n_0 { ; Generic Mandelbrot set init: complex u = #pixel if @insout u = 1/u + 1 endif complex an2 = 1/(@n + 2) complex an1 = 1/(@n + 1) complex t = ((@n + 1)*u - (@n + 2))*u^(@n + 1) complex s = (@n + 2 + (@n + 1)*u*t)/((@n + 1)*(1 + t)) complex p = ((@n + 1)*(@n + 2)*(s - u))^(1/(@n + 1)) an1 = -an1*p complex a0 = s*p z = a0 loop: z = (an2*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Meet100_n_0" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jeet100_n_0" seed = #pixel power = power n = n insout = insout bailout = bailout } Jeet100_n_0 { ; Generic Julia set init: complex u = @seed if @insout u = 1/u + 1 endif complex an2 = 1/(@n + 2) complex an1 = 1/(@n + 1) complex t = ((@n + 1)*u - (@n + 2))*u^(@n + 1) complex s = (@n + 2 + (@n + 1)*u*t)/((@n + 1)*(1 + t)) complex p = ((@n + 1)*(@n + 2)*(s - u))^(1/(@n + 1)) an1 = -an1*p complex a0 = s*p z = #pixel*2 loop: z = (an2*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Jeet100_n_0" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Meet100_n_0" power = power bailout = bailout } Chebychain { ; Generic Mandelbrot set init: complex s = #pixel complex t = 0 complex u = 0 int usign = 1 if @insout if @geomtree == 3 if @nd == 0 if @lowfix if @fold s = 1/s + sqr(#pi) else s = 1/s + #pi endif else s = 1/s endif elseif @lowfix if @coslimit s = 1/s elseif 2*@nd == @n if @fold s = 1/s - 1/(4*sqr(tan(#pi/@n))) else s = 1/s - 1/(4*sqr(tan(0.5*#pi/@n))) endif s = sqrt(s) - 0.5 s = 1/s + 1 elseif @fold s = flip(1)/s - 0.5 - flip(1)/(2*tan(#pi/@n)) s = 1/s + 1 ; s = 1/s + exp(flip(2)*#pi/@n) else s = flip(1)/s - 0.5 - flip(1)/(2*tan(0.5*#pi/@n)) s = 1/s + 1 ; s = 1/s + exp(flip(1)*#pi/@n) endif else if 2*@nd == @n s = sqrt(s) endif s = flip(1)*s - 0.5 s = 1/s + 1 endif elseif @coslimit s = 1/s + 1 elseif @fold s = 1/s + sqr(@n*cos((@n - 2)*#pi/(2*@n))/#pi) else s = 1/s + @n*cos((@nd + 1)*#pi/@n)/#pi endif endif if @fold if @coslimit && (@nd != 0) && (@geomtree == 3) s = flip(1)*s s = ((s + 1)/(s - 1)) s = flip(1)*log(s) elseif @coslimit && (@nd != 0) && (@geomtree == 2) s = sqrt(1/s + 1) s = flip(1)*((s + 1)/(s - 1)) s = flip(1)*log(s)/#pi elseif (@geomtree == 2) && (floor(0.5*@n) != 0.5*@n) && (@nd != 0) s = sqrt(1/s + 1) s = flip(1)*((s + 1)/(s - 1)) else s = sqrt(s) endif endif if @geomtree == 3 if @coslimit usign = 1 elseif @nd == 0 if floor(0.25*@n) == 0.25*@n usign = 1 else usign = -1 endif else if floor(0.5*@nd) == 0.5*@nd usign = 1 else usign = -1 endif endif if @lowfix usign = -usign endif ; if @coslimit ; s = s*#pi ; else ; s = s*#pi/@n ; endif if (@nd != 0) && !@coslimit complex u = cos(@nd*#pi/@n) complex v = sin(@nd*#pi/@n) complex r = flip(0.5)*(s - 1/s) s = 0.5*(s + 1/s) complex t = s*u + r*v s = s*u - r*v elseif (@nd != 0) && @coslimit t = s + 2*#pi*@nd else t = -s endif elseif @coslimit s = s*#pi complex u = 0 int usign = 1 elseif (@geomtree == 2) && (@nd != 0) complex u = cos(@nd*#pi/@n) complex v = sin(@nd*#pi/@n) complex r = flip(0.5)*(s - 1/s) s = 0.5*(s + 1/s) complex t = s*u + r*v s = s*u - r*v else s = s*#pi/@n if @fold complex u = 0 if floor(0.25*@n) == 0.25*@n int usign = 1 else int usign = -1 endif else complex u = cos(@nd*#pi/@n) if floor(0.5*@nd) == 0.5*@nd int usign = 1 else int usign = -1 endif endif endif complex ss = sqr(s) complex sf = 0 if @coslimit sf = cos(s) elseif @n == 3 sf = (4*ss - 3)*s elseif @n == 4 sf = ((8*ss - 8)*ss + 1) elseif @n == 5 sf = ((16*ss - 20)*ss + 5)*s elseif @n == 6 sf = (((32*ss - 48)*ss + 18)*ss - 1) elseif @n == 7 sf = (((64*ss - 112)*ss + 56)*ss - 7)*s elseif @n == 8 sf = (2*sqr(2*sqr(2*ss - 1) - 1) - 1) elseif @n == 9 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf elseif @n == 16 sf = (2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) elseif @n == 27 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf sf = (4*sqr(sf) - 3)*sf elseif @n == 32 sf = (2*sqr(2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) - 1) else sf = (2*ss - 1) endif if @geomtree == 3 complex p = (s - t)/(usign - sf) complex a0 = s - usign*p z = a0 - usign*p elseif @geomtree == 2 if @nd == 0 complex p = s if @coslimit && (floor(0.5*@n) != 0.5*@n) complex a0 = 0.5*#pi z = p + a0 else complex a0 = 0 z = p endif else if @coslimit complex p = @nd*#pi complex a0 = s + p z = s else complex p = 0.5*(s - t) complex a0 = 0.5*(s + t) z = s endif endif elseif @geomtree == 1 complex p = s complex a0 = u + p*usign z = u else complex p = (u - s)/(sf + usign) complex a0 = u - sf*p z = u endif complex zf = 0 loop: complex zz = sqr(z) if @coslimit zf = cos(z) elseif @n == 3 zf = (4*zz - 3)*z elseif @n == 4 zf = ((8*zz - 8)*zz + 1) elseif @n == 5 zf = ((16*zz - 20)*zz + 5)*z elseif @n == 6 zf = (((32*zz - 48)*zz + 18)*zz - 1) elseif @n == 7 zf = (((64*zz - 112)*zz + 56)*zz - 7)*z elseif @n == 8 zf = (2*sqr(2*sqr(2*zz - 1) - 1) - 1) elseif @n == 9 zf = (4*zz - 3)*z zf = (4*sqr(zf) - 3)*zf elseif @n == 16 zf = (2*sqr(2*sqr(2*sqr(2*zz - 1) - 1) - 1) - 1) elseif @n == 27 zf = (4*zz - 3)*z zf = (4*sqr(zf) - 3)*zf zf = (4*sqr(zf) - 3)*zf elseif @n == 32 zf = (2*sqr(2*sqr(2*sqr(2*sqr(2*zz - 1) - 1) - 1) - 1) - 1) else zf = (2*zz - 1) endif z = zf*p + a0 bailout: |z| <= @bailout default: title = "Chebychain" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param geomtree caption = "Geometry" default = 0 hint = "This defines the connection geometry of the critical points." endparam param n caption = "Order" default = 3 hint = "This defines the order of the Chebyshev polynomial." endparam param nd caption = "Destination" default = 0 hint = "This defines the destination critical point." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param lowfix caption = "Fix Lower" default = false hint = "Sends critical value -1 to a fixed point instead of +1." endparam param coslimit caption = "Cosine limit" default = false hint = "As order approaches infinity we get a cosine \ with chained critical points." endparam param fold caption = "Fold up" default = false hint = "Fold a symmetry at 0." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 1280000.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jhebychain" seed = #pixel power = power n = n nd = nd coslimit = coslimit geomtree = geomtree lowfix = lowfix insout = insout fold = fold bailout = bailout } Jhebychain { ; Generic Julia set init: complex s = @seed complex t = 0 complex u = 0 int usign = 1 if @insout if @geomtree == 3 if @nd == 0 if @lowfix if @fold s = 1/s + sqr(#pi) else s = 1/s + #pi endif else s = 1/s endif elseif @lowfix if @coslimit s = 1/s elseif 2*@nd == @n if @fold s = 1/s - 1/(4*sqr(tan(#pi/@n))) else s = 1/s - 1/(4*sqr(tan(0.5*#pi/@n))) endif s = sqrt(s) - 0.5 s = 1/s + 1 elseif @fold s = flip(1)/s - 0.5 - flip(1)/(2*tan(#pi/@n)) s = 1/s + 1 ; s = 1/s + exp(flip(2)*#pi/@n) else s = flip(1)/s - 0.5 - flip(1)/(2*tan(0.5*#pi/@n)) s = 1/s + 1 ; s = 1/s + exp(flip(1)*#pi/@n) endif else if 2*@nd == @n s = sqrt(s) endif s = flip(1)*s - 0.5 s = 1/s + 1 endif elseif @coslimit s = 1/s + 1 elseif @fold s = 1/s + sqr(@n*cos((@n - 2)*#pi/(2*@n))/#pi) else s = 1/s + @n*cos((@nd + 1)*#pi/@n)/#pi endif endif if @fold if @coslimit && (@nd != 0) && (@geomtree == 3) s = flip(1)*s s = ((s + 1)/(s - 1)) s = flip(1)*log(s) elseif @coslimit && (@nd != 0) && (@geomtree == 2) s = sqrt(1/s + 1) s = flip(1)*((s + 1)/(s - 1)) s = flip(1)*log(s)/#pi elseif (@geomtree == 2) && (floor(0.5*@n) != 0.5*@n) && (@nd != 0) s = sqrt(1/s + 1) s = flip(1)*((s + 1)/(s - 1)) else s = sqrt(s) endif endif if @geomtree == 3 if @coslimit usign = 1 elseif @nd == 0 if floor(0.25*@n) == 0.25*@n usign = 1 else usign = -1 endif else if floor(0.5*@nd) == 0.5*@nd usign = 1 else usign = -1 endif endif if @lowfix usign = -usign endif ; if @coslimit ; s = s*#pi ; else ; s = s*#pi/@n ; endif if (@nd != 0) && !@coslimit complex u = cos(@nd*#pi/@n) complex v = sin(@nd*#pi/@n) complex r = flip(0.5)*(s - 1/s) s = 0.5*(s + 1/s) complex t = s*u + r*v s = s*u - r*v elseif (@nd != 0) && @coslimit t = s + 2*#pi*@nd else t = -s endif elseif @coslimit s = s*#pi complex u = 0 int usign = 1 elseif (@geomtree == 2) && (@nd != 0) complex u = cos(@nd*#pi/@n) complex v = sin(@nd*#pi/@n) complex r = flip(0.5)*(s - 1/s) s = 0.5*(s + 1/s) complex t = s*u + r*v s = s*u - r*v else s = s*#pi/@n if @fold complex u = 0 if floor(0.25*@n) == 0.25*@n int usign = 1 else int usign = -1 endif else complex u = cos(@nd*#pi/@n) if floor(0.5*@nd) == 0.5*@nd int usign = 1 else int usign = -1 endif endif endif complex ss = sqr(s) complex sf = 0 if @coslimit sf = cos(s) elseif @n == 3 sf = (4*ss - 3)*s elseif @n == 4 sf = ((8*ss - 8)*ss + 1) elseif @n == 5 sf = ((16*ss - 20)*ss + 5)*s elseif @n == 6 sf = (((32*ss - 48)*ss + 18)*ss - 1) elseif @n == 7 sf = (((64*ss - 112)*ss + 56)*ss - 7)*s elseif @n == 8 sf = (2*sqr(2*sqr(2*ss - 1) - 1) - 1) elseif @n == 9 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf elseif @n == 16 sf = (2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) elseif @n == 27 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf sf = (4*sqr(sf) - 3)*sf elseif @n == 32 sf = (2*sqr(2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) - 1) else sf = (2*ss - 1) endif if @geomtree == 3 complex p = (s - t)/(usign - sf) complex a0 = s - usign*p z = a0 - usign*p elseif @geomtree == 2 if @nd == 0 complex p = s if @coslimit && (floor(0.5*@n) != 0.5*@n) complex a0 = 0.5*#pi z = p + a0 else complex a0 = 0 z = p endif else if @coslimit complex p = @nd*#pi complex a0 = s + p z = s else complex p = 0.5*(s - t) complex a0 = 0.5*(s + t) z = s endif endif elseif @geomtree == 1 complex p = s complex a0 = u + p*usign z = u else complex p = (u - s)/(sf + usign) complex a0 = u - sf*p z = u endif complex zf = 0 if @coslimit z = #pi*#pixel else z = #pi*#pixel/@n endif loop: complex zz = sqr(z) if @coslimit zf = cos(z) elseif @n == 3 zf = (4*zz - 3)*z elseif @n == 4 zf = ((8*zz - 8)*zz + 1) elseif @n == 5 zf = ((16*zz - 20)*zz + 5)*z elseif @n == 6 zf = (((32*zz - 48)*zz + 18)*zz - 1) elseif @n == 7 zf = (((64*zz - 112)*zz + 56)*zz - 7)*z elseif @n == 8 zf = (2*sqr(2*sqr(2*zz - 1) - 1) - 1) elseif @n == 9 zf = (4*zz - 3)*z zf = (4*sqr(zf) - 3)*zf elseif @n == 16 zf = (2*sqr(2*sqr(2*sqr(2*zz - 1) - 1) - 1) - 1) elseif @n == 27 zf = (4*zz - 3)*z zf = (4*sqr(zf) - 3)*zf zf = (4*sqr(zf) - 3)*zf elseif @n == 32 zf = (2*sqr(2*sqr(2*sqr(2*sqr(2*zz - 1) - 1) - 1) - 1) - 1) else zf = (2*zz - 1) endif z = zf*p + a0 bailout: |z| <= @bailout default: title = "Jhebychain" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param geomtree caption = "Geometry" default = 0 hint = "This defines the connection geometry of the critical points." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param nd caption = "Destination" default = 0 hint = "This defines the destination critical point." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param lowfix caption = "Fix Lower" default = false hint = "Sends critical value -1 to a fixed point instead of +1." endparam param fold caption = "Fold up" default = false hint = "Fold a symmetry at 0." endparam param coslimit caption = "Cosine limit" default = false hint = "As order approaches infinity we get a cosine \ with chained critical points." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Chebychain" power = power bailout = bailout } Cube3crit { ; Generic Mandelbrot set init: complex s = #pixel if @fold if @geomtree == 38 || @geomtree == 37 || @geomtree == 39 || @geomtree == 41 s = sqrt(s) elseif @geomtree == 40 s = sqrt(1/s + 1) s = 2*(s - 1)/(9*(s + 1)) elseif @geomtree == 21 s = s^(1/3) elseif @geomtree == 18 || @geomtree == 19 || @geomtree == 20 s = 1/(-sqrt(1/s + 2.25) + 1.5) elseif @geomtree == 15 s = sqrt(s) s = (1 + s)/(1 - s) s = s^(1/3) complex cr3 = 0.5*(sqrt(3) + flip(1)) s = (cr3*s*cr3 + 1)/(sqrt(3)*(s*cr3 + cr3)) else s = sqrt(s) + 0.5 endif endif if @insout s = 1/s - 1 endif if @nd == 0 complex t = s - sqr(s) complex u = s - 1 s = -s elseif @nd == 1 complex u = s - sqr(s) complex t = s - 1 s = -s elseif @nd == 2 complex t = -s complex u = s - sqr(s) s = s - 1 elseif @nd == 3 complex u = -s complex t = s - sqr(s) s = s - 1 elseif @nd == 4 complex t = s - 1 complex u = -s s = s - sqr(s) else complex u = s - 1 complex t = -s s = s - sqr(s) endif complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t if @geomtree == 42 complex qrad = 3*(((((sqr(s) - 3)*s + 10)*s + 9)*s - 42)*s + 52) qrad = 3*sqrt(qrad) if (imag(qrad) < 0) qrad = -qrad endif a1 = 54*(((5*s + 3)*s - 21)*s + 40 + qrad)/(((s - 12)*s + 21)*s + 98) a1 = a1^(1/3) p = (s - 1)*2/(3*a1) am1 = 1 a0 = (a1*p - 4)*a1/12 complex ca2 = 0.5*a1 complex ca1 = 0 complex ca0 = -0.5 complex cq = (3*ca1 - ca2*ca2)/9 complex cr = (9*ca2*ca1 - 27*ca0 - 2*ca2*ca2*ca2)/54 if real(cr) < 0 complex w = (cr - sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) else complex w = (cr + sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) endif complex wi = cq/w complex s = w - wi - ca2/3 s = ((s + a1)*s + am1/s)*p + a0 elseif @geomtree == 41 p = -s a0 = -3*s*s*s + 3*s a1 = 1/s - 3*s am1 = s - s*s*s t = 0.5*(1/s + 3*s) t = 0.5*(-t - sqrt(sqr(t) - 4)) s = t + s elseif @geomtree == 40 ; s = s + 3 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t p = s a0 = u - p*uf s = t elseif @geomtree == 39 p = s a0 = 3*s*s*s + s - 2*s*s/conj(s) a1 = 1/conj(s) - 3*s am1 = s*s/conj(s) - s*s*s t = 0.5*(1/conj(s) + 3*s) t = 0.5*(-t + sqrt(sqr(t) - 4*s/conj(s))) s = t + s elseif @geomtree == 38 p = s a0 = 3*s*s*s + s + 2*s*s/conj(s) a1 = -1/conj(s) - 3*s am1 = -s*s/conj(s) - s*s*s t = 0.5*(-1/conj(s) + 3*s) t = 0.5*(-t + sqrt(sqr(t) + 4*s/conj(s))) s = t + s elseif @geomtree == 37 p = s a0 = 3*s*s*s - s a1 = 1/s - 3*s am1 = s - s*s*s t = 0.5*(1/s + 3*s) t = 0.5*(-t + sqrt(sqr(t) - 4)) s = t + s elseif @geomtree == 36 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - 2*(t + t))/(tf - sf) a0 = s - p*tf s = t elseif @geomtree == 35 s = s - 1.5 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - 2*(t + t))/(uf - sf) a0 = s - p*uf s = t elseif @geomtree == 34 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - t)/(tf - sf) a0 = s - p*tf s = u elseif @geomtree == 33 s = s + 3 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - u)/(uf - sf) a0 = s - p*uf s = t elseif @geomtree == 32 s = s + 3 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - 0)/(uf - sf) a0 = s - p*uf s = t elseif @geomtree == 31 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - 0)/(tf - sf) a0 = s - p*tf s = u elseif @geomtree == 30 s = 9/(s + 1) - 0.5 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - t)/(uf - sf) a0 = s - p*uf s = t elseif @geomtree == 29 s = s u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - u)/(tf - sf) a0 = s - p*tf s = u elseif @geomtree == 28 p = -s s = -0.5 u = 1 t = 1 complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t a0 = 0 - p*uf elseif @geomtree == 27 p = -s s = 1 u = -0.5 t = 1 complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t a0 = 0 - p*uf elseif @geomtree == 26 p = -s s = 1 u = -0.5 t = 1 complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t a0 = 2*(t + s) - p*uf elseif @geomtree == 25 p = -s s = 1 u = -0.5 t = 1 complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t a0 = 2*(t + s) - p*tf elseif @geomtree == 24 p = -s s = 1 u = -0.5 t = 1 complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t a0 = s - p*uf elseif @geomtree == 23 p = -s s = -0.5 u = 1 t = 1 complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t a0 = s - p*uf elseif @geomtree == 22 p = (u - 2*(s + u))/(tf - uf) a0 = u - tf*p elseif @geomtree == 21 p = s a0 = 0 a1 = 0 am1 = 2 s = 1 elseif @geomtree == 20 p = (t - 2*(t + u))/(tf - uf) a0 = t - tf*p elseif @geomtree == 19 p = (t - 2*(t + s))/(tf - uf) a0 = t - tf*p elseif @geomtree == 18 p = (t - s)/(tf - uf) a0 = t - tf*p elseif @geomtree == 17 p = (t - 0)/(tf - uf) a0 = t - tf*p elseif @geomtree == 16 p = (u - t)/(tf - uf) a0 = u - tf*p elseif @geomtree == 15 p = (t - u)/(tf - uf) a0 = t - tf*p elseif @geomtree == 14 p = (2*(t + s) - 2*(u + s))/(tf - uf) a0 = 2*(t + s) - tf*p elseif @geomtree == 13 p = (2*(t + s) - 0)/(tf - uf) a0 = 2*(t + s) - tf*p elseif @geomtree == 12 p = (2*(u + s) - 0)/(tf - uf) a0 = 2*(u + s) - tf*p elseif @geomtree == 11 p = (2*(u + t) - 0)/(tf - uf) a0 = 2*(u + t) - tf*p elseif @geomtree == 10 p = (u - 0)/(tf - uf) a0 = u - tf*p elseif @geomtree == 9 p = (s - 0)/(tf - uf) a0 = s - tf*p elseif @geomtree == 8 p = (2*(u + s) - 2*(t + s))/(tf - uf) a0 = 2*(u + s) - tf*p elseif @geomtree == 7 p = (2*(u + t) - 2*(t + s))/(tf - uf) a0 = 2*(u + t) - tf*p elseif @geomtree == 6 p = (u - 2*(t + s))/(tf - uf) a0 = u - tf*p elseif @geomtree == 5 p = (s - 2*(t + s))/(tf - uf) a0 = s - tf*p elseif @geomtree == 4 p = (s - 2*(u + s))/(tf - uf) a0 = s - tf*p elseif @geomtree == 3 p = (2*(s + t) - 2*(u + t))/(tf - uf) a0 = 2*(s + t) - tf*p elseif @geomtree == 2 p = (s - 2*(u + t))/(tf - uf) a0 = s - tf*p elseif @geomtree == 1 p = (u - 2*(u + t))/(tf - uf) a0 = u - tf*p else p = (u - s)/(tf - uf) a0 = u - tf*p endif complex bailval = @bailout/|p| complex pd = 0 if @bailany pd = p*sqrt(1/3)*@windage endif zd = @bailout z = ((s + a1)*s + am1/s)*p + a0 loop: complex zi = 1/z if @bailany zd = zd*pd*(2*z + a1 - am1*sqr(zi)) endif z = ((z + a1)*z + am1*zi)*p + a0 bailout: (|z| <= bailval) && (|zd| > 1) default: title = "Cube3crit" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param geomtree caption = "Geometry" default = 0 hint = "This defines the connection geometry of the critical points." endparam param n caption = "Order" default = 3 hint = "This defines the order of the Chebyshev polynomial." endparam param nd caption = "Destination" default = 0 hint = "This defines the destination critical point." endparam param insout caption = "Inside Out" default = true hint = "Remaps infinity to a pole." endparam param lowfix caption = "Fix Lower" default = false hint = "Sends critical value -1 to a fixed point instead of +1." endparam param bailany caption = "Black Chaos" default = false hint = "Bail out on hitting any attractor." endparam param windage caption = "Kentucky" default = 1.0 hint = "Windage for the convergance criteria." endparam param fold caption = "Fold up" default = false hint = "Fold a symmetry at 0.5." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 1280000.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jube3crit" seed = #pixel power = power n = n nd = nd bailany = bailany windage = windage geomtree = geomtree lowfix = lowfix insout = insout fold = fold bailout = bailout } Jube3crit { ; Generic Julia set init: complex s = @seed if @fold if @geomtree == 38 || @geomtree == 37 || @geomtree == 39 || @geomtree == 41 s = sqrt(s) elseif @geomtree == 40 s = sqrt(1/s + 1) s = 2*(s - 1)/(9*(s + 1)) elseif @geomtree == 21 s = s^(1/3) elseif @geomtree == 18 || @geomtree == 19 || @geomtree == 20 s = 1/(-sqrt(1/s + 2.25) + 1.5) elseif @geomtree == 15 s = sqrt(s) s = (1 + s)/(1 - s) s = s^(1/3) complex cr3 = 0.5*(sqrt(3) + flip(1)) s = (cr3*s*cr3 + 1)/(sqrt(3)*(s*cr3 + cr3)) else s = sqrt(s) + 0.5 endif endif if @insout s = 1/s - 1 endif if @nd == 0 complex t = s - sqr(s) complex u = s - 1 s = -s elseif @nd == 1 complex u = s - sqr(s) complex t = s - 1 s = -s elseif @nd == 2 complex t = -s complex u = s - sqr(s) s = s - 1 elseif @nd == 3 complex u = -s complex t = s - sqr(s) s = s - 1 elseif @nd == 4 complex t = s - 1 complex u = -s s = s - sqr(s) else complex u = s - 1 complex t = -s s = s - sqr(s) endif complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t if @geomtree == 42 complex qrad = 3*sqrt(3*(((((sqr(s) - 3)*s + 10)*s + 9)*s - 42)*s + 52)) if (imag(qrad) < 0) qrad = -qrad endif a1 = 54*(((5*s + 3)*s - 21)*s + 40 + qrad)/(((s - 12)*s + 21)*s + 98) a1 = a1^(1/3) p = (s - 1)*2/(3*a1) am1 = 1 a0 = (a1*p - 4)*a1/12 elseif @geomtree == 41 p = -s a0 = -3*s*s*s + 3*s a1 = 1/s - 3*s am1 = s - s*s*s t = 0.5*(1/s + 3*s) t = 0.5*(-t - sqrt(sqr(t) - 4)) s = t + s elseif @geomtree == 40 ; s = s + 3 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t p = s a0 = u - p*uf s = t elseif @geomtree == 39 p = s a0 = 3*s*s*s + s - 2*s*s/conj(s) a1 = 1/conj(s) - 3*s am1 = s*s/conj(s) - s*s*s t = 0.5*(1/conj(s) + 3*s) t = 0.5*(-t + sqrt(sqr(t) - 4*s/conj(s))) s = t + s elseif @geomtree == 38 p = s a0 = 3*s*s*s + s + 2*s*s/conj(s) a1 = -1/conj(s) - 3*s am1 = -s*s/conj(s) - s*s*s t = 0.5*(-1/conj(s) + 3*s) t = 0.5*(-t + sqrt(sqr(t) + 4*s/conj(s))) s = t + s elseif @geomtree == 37 p = s a0 = 3*s*s*s - s a1 = 1/s - 3*s am1 = s - s*s*s t = 0.5*(1/s + 3*s) t = 0.5*(-t + sqrt(sqr(t) - 4)) s = t + s elseif @geomtree == 36 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - 2*(t + t))/(tf - sf) a0 = s - p*tf s = t elseif @geomtree == 35 s = s - 1.5 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - 2*(t + t))/(uf - sf) a0 = s - p*uf s = t elseif @geomtree == 34 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - t)/(tf - sf) a0 = s - p*tf s = u elseif @geomtree == 33 s = s + 3 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - u)/(uf - sf) a0 = s - p*uf s = t elseif @geomtree == 32 s = s + 3 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - 0)/(uf - sf) a0 = s - p*uf s = t elseif @geomtree == 31 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - 0)/(tf - sf) a0 = s - p*tf s = t elseif @geomtree == 30 s = 9/(s + 1) - 0.5 u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - t)/(uf - sf) a0 = s - p*uf s = t elseif @geomtree == 29 s = s u = -0.5 t = 1 complex a1 = -2*(t + u + t) complex am1 = 2*t*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t complex sf = (s + a1)*s + am1/s p = (s - u)/(tf - sf) a0 = s - p*tf s = u elseif @geomtree == 28 p = -s s = -0.5 u = 1 t = 1 complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t a0 = 0 - p*uf elseif @geomtree == 27 p = -s s = 1 u = -0.5 t = 1 complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t a0 = 0 - p*uf elseif @geomtree == 26 p = -s s = 1 u = -0.5 t = 1 complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t a0 = 2*(t + s) - p*uf elseif @geomtree == 25 p = -s s = 1 u = -0.5 t = 1 complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t a0 = 2*(t + s) - p*tf elseif @geomtree == 24 p = -s s = 1 u = -0.5 t = 1 complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t a0 = s - p*uf elseif @geomtree == 23 p = -s s = -0.5 u = 1 t = 1 complex a1 = -2*(s + u + t) complex am1 = 2*s*u*t complex uf = (u + a1)*u + am1/u complex tf = (t + a1)*t + am1/t a0 = s - p*uf elseif @geomtree == 22 p = (u - 2*(s + u))/(tf - uf) a0 = u - tf*p elseif @geomtree == 21 p = s a0 = 0 a1 = 0 am1 = 2 s = 1 elseif @geomtree == 20 p = (t - 2*(t + u))/(tf - uf) a0 = t - tf*p elseif @geomtree == 19 p = (t - 2*(t + s))/(tf - uf) a0 = t - tf*p elseif @geomtree == 18 p = (t - s)/(tf - uf) a0 = t - tf*p elseif @geomtree == 17 p = (t - 0)/(tf - uf) a0 = t - tf*p elseif @geomtree == 16 p = (u - t)/(tf - uf) a0 = u - tf*p elseif @geomtree == 15 p = (t - u)/(tf - uf) a0 = t - tf*p elseif @geomtree == 14 p = (2*(t + s) - 2*(u + s))/(tf - uf) a0 = 2*(t + s) - tf*p elseif @geomtree == 13 p = (2*(t + s) - 0)/(tf - uf) a0 = 2*(t + s) - tf*p elseif @geomtree == 12 p = (2*(u + s) - 0)/(tf - uf) a0 = 2*(u + s) - tf*p elseif @geomtree == 11 p = (2*(u + t) - 0)/(tf - uf) a0 = 2*(u + t) - tf*p elseif @geomtree == 10 p = (u - 0)/(tf - uf) a0 = u - tf*p elseif @geomtree == 9 p = (s - 0)/(tf - uf) a0 = s - tf*p elseif @geomtree == 8 p = (2*(u + s) - 2*(t + s))/(tf - uf) a0 = 2*(u + s) - tf*p elseif @geomtree == 7 p = (2*(u + t) - 2*(t + s))/(tf - uf) a0 = 2*(u + t) - tf*p elseif @geomtree == 6 p = (u - 2*(t + s))/(tf - uf) a0 = u - tf*p elseif @geomtree == 5 p = (s - 2*(t + s))/(tf - uf) a0 = s - tf*p elseif @geomtree == 4 p = (s - 2*(u + s))/(tf - uf) a0 = s - tf*p elseif @geomtree == 3 p = (2*(s + t) - 2*(u + t))/(tf - uf) a0 = 2*(s + t) - tf*p elseif @geomtree == 2 p = (s - 2*(u + t))/(tf - uf) a0 = s - tf*p elseif @geomtree == 1 p = (u - 2*(u + t))/(tf - uf) a0 = u - tf*p else p = (u - s)/(tf - uf) a0 = u - tf*p endif complex bailval = @bailout/|p| z = #pixel/p complex pd = 0 if @bailany pd = p*sqrt(1/3)*@windage endif zd = @bailout loop: complex zi = 1/z if @bailany zd = zd*pd*(2*z + a1 - am1*sqr(zi)) endif z = ((z + a1)*z + am1*zi)*p + a0 bailout: (|z| <= bailval) && (|zd| > 1) default: title = "Jube3crit" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param geomtree caption = "Geometry" default = 0 hint = "This defines the connection geometry of the critical points." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param nd caption = "Destination" default = 0 hint = "This defines the destination critical point." endparam param insout caption = "Inside Out" default = true hint = "Remaps infinity to a pole." endparam param lowfix caption = "Fix Lower" default = false hint = "Sends critical value -1 to a fixed point instead of +1." endparam param fold caption = "Fold up" default = false hint = "Fold a symmetry at 0." endparam param windage caption = "Kentucky" default = 1.0 hint = "Windage for the convergance criteria." endparam param bailany caption = "Black Chaos" default = false hint = "Bail out on hitting any attractor." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Cube3crit" power = power bailout = bailout } Cube4crit { ; Generic Mandelbrot set init: complex s = #pixel if @fold if @geomtree == 35 s = sqrt(1/s + 1) s = 3*(s - 1)/(s + 1) elseif @geomtree == 30 s = sqrt(1/(sqrt(1/s + 1.25) + 0.5) - 1) elseif @geomtree == 29 || @geomtree == 33 s = sqrt(1/(sqrt(s) + 0.5) - 1) elseif @geomtree == 21 s = s^(1/3) elseif @geomtree == 19 || @geomtree == 32 s = sqrt(9/s + 9) s = -(s + 1)/(s + 3) elseif @geomtree == 3 s = sqrt(s) s = flip(2)/(s + flip(1)) - 1 s = s^(1/3) complex cr3 = -0.5*(sqrt(3) + flip(1)) s = (cr3*s*flip(1) + 1)/(sqrt(3)*(s*flip(1) + cr3)) elseif @geomtree == 0 || @geomtree == 1 s = flip(2)/(s + flip(1)) - 1 s = s^(1/3) complex cr3 = -0.5*(sqrt(3) + flip(1)) s = (cr3*s*flip(1) + 1)/(sqrt(3)*(s*flip(1) + cr3)) else s = sqrt(s) - 0.5 endif endif if @insout s = 1/s - 1/3 endif complex a = s complex b = -(2 + 3*a)/(1 + 2*a) complex c = 0 s = a*b if @geomtree == 46 a = 1/a + 1 c = 0 p = -a/(1/3 + (a - 1/3)/(sqr(a)*(a - 3))) a0 = a + p/3 a = -1/3 b = -3 s = a0 elseif @geomtree == 45 a = 1/a + 1 c = 0 a0 = a p = (1 - a)*sqr(a)*(a - 3)/(a - 1/3) a = -1/3 b = -3 s = 1 elseif @geomtree == 44 a = 1/a + 1 c = 3*a a0 = a p = (1/a - a)*c a = -1/3 b = -3 s = 0 elseif @geomtree == 43 a = 1/a c = 0 a0 = 1 p = a a = -1/3 b = -3 s = 1 elseif @geomtree == 42 c = -sqr(a)*(a - 3)/(a - 1/3) a0 = 1 p = (a - 1)*(2*c/3 - 2)*1.5 a = -1/3 b = -3 s = 0 elseif @geomtree == 41 a = 1/a + 1 c = -sqr(a)*(a - 3)/(a - 1/3) a0 = a p = -a0*(2*c/3 - 2)*1.5 a = -1/3 b = -3 s = 0 elseif @geomtree == 40 a = 1/a + 1 c = -sqr(a)*(a - 3)/(a - 1/3) a0 = a p = c*(1 - a0) a = -1/3 b = -3 s = 1 elseif @geomtree == 39 c = -sqr(a)*(a - 3)/(a - 1/3) a0 = 3 p = c*(a - a0) a = -1/3 b = -3 s = 1 elseif @geomtree == 38 c = 0 a0 = 3 p = a a = -1/3 b = -3 s = 1 elseif @geomtree == 37 c = 0 a0 = a p = -sqr(a)*sqr(a - 3)/(a - 1/3) a = -1/3 b = -3 s = 1 elseif @geomtree == 36 c = 0 a0 = a p = -a*sqr(a)*(a - 3)/(a - 1/3) a = -1/3 b = -3 s = 1 elseif @geomtree == 35 c = 0 p = a a0 = 0 a = -1/3 b = -3 s = 1 elseif @geomtree == 34 a = 1/a a0 = real(a) b = 0.5*(1/a0 - a0) + 0.5*flip(imag(a)) a = -1/conj(b) c = conj(a0*b) p = -conj(b)*(1 + sqr(a0)) s = 0.25*(-(b + 3*a) + sqrt(sqr(b + 3*a) - 16*a*b)) elseif @geomtree == 33 a0 = a b = -(1 - sqr(sqr(a0)))/(a0*(1 - sqr(a0))) a = 1/b c = -a0*b p = b*(sqr(a0) - 1) s = 0.25*(-(b + 3*a) + sqrt(sqr(b + 3*a) - 16*a*b)) elseif @geomtree == 32 c = 0 p = -b*s a0 = 0 elseif @geomtree == 31 a = 1/a a0 = real(a) b = -0.5*(1/a0 + a0) + flip(imag(a)) a = 1/conj(b) c = conj(a0*b) p = conj(b)*(1 - sqr(a0)) s = 0.25*(-(b + 3*a) + sqrt(sqr(b + 3*a) - 16*a*b)) elseif @geomtree == 30 a0 = a b = -(1 + sqr(sqr(a0)))/(a0*(1 + sqr(a0))) a = 1/b c = a0*b p = b*(1 - sqr(a0)) s = 0.25*(-(b + 3*a) + sqrt(sqr(b + 3*a) - 16*a*b)) elseif @geomtree == 29 a0 = a b = -0.5*(1/a0 + a0) a = 1/b c = a0*b p = b*(1 - sqr(a0)) s = 0.25*(-(b + 3*a) + sqrt(sqr(b + 3*a) - 16*a*b)) elseif @geomtree == 28 complex di = -b complex ds = -a complex d0 = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 27 complex di = s complex d0 = -a complex ds = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 26 complex di = 1 complex ds = -b complex d0 = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 25 complex di = s complex ds = -b complex d0 = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 24 complex di = 0 complex ds = -b complex d0 = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 23 complex di = -b complex d0 = 1 complex ds = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 22 complex di = s complex d0 = 1 complex ds = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 21 complex di = s complex d1 = -a complex d0 = 1 c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 20 a = 1/a c = 0 a0 = 0 b = a a = -1/conj(b) p = b s = 0.25*(-(b + 3*a) + sqrt(sqr(b + 3*a) - 16*a*b)) elseif @geomtree == 19 c = 0 p = b*s a0 = 0 elseif @geomtree == 18 complex di = 0 complex d1 = s complex d0 = -a c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 17 complex di = 1 complex d1 = 0 complex d0 = -a c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 16 complex di = 1 complex d1 = -b complex d0 = -a c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 15 complex di = 1 complex d1 = 0 complex d0 = -a/(1 + 2*a) c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 14 complex di = 0 complex d1 = -b complex d0 = -a c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 13 complex di = -b complex d1 = 0 complex d0 = 1 c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 12 complex di = -a/(1 + 2*a) complex ds = -a complex d0 = -b c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 11 c = 0 a0 = s p = (a0 + a)/(1 + 2*a) elseif @geomtree == 10 c = 0 a0 = 1 p = (a0*(1 + 2*a) + a)*s*sqr(b) elseif @geomtree == 9 c = 0 a0 = s p = (a0*(1 + 2*a) + a)*s*sqr(b) elseif @geomtree == 8 complex di = -b complex d1 = s complex d0 = 1 c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 7 complex di = s complex d1 = 0 complex d0 = 1 c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 6 complex di = s complex d1 = -b complex d0 = -a/(1 + 2*a) c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 5 complex di = -a complex d1 = 0 complex d0 = 1 c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 4 complex di = -a complex d1 = -b complex d0 = -a/(1 + 2*a) c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 3 complex di = -a complex d0 = -b complex d1 = -a/(1 + 2*a) c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 2 c = 0 p = s/(1 + 2*a) a0 = s elseif @geomtree == 1 c = 0 p = 1/(1 + 2*a) a0 = 1 else c = sqr(1 + a)/(sqr(a)*(1 + 2*a)) p = -2*c a0 = -b endif complex bailval = @bailout/|p| complex pd = 0 if @bailany pd = -2*p*sqrt(1/3)*@windage endif zd = @bailout complex zi = 1/((s + b)*sqr(s) + c*(s + a)) z = (s + a)*zi*p + a0 loop: zi = 1/((z + b)*sqr(z) + c*(z + a)) if @bailany zd = zd*pd*sqr(zi)*z*((z + 0.5*(b + 3*a))*z + a*b) endif z = (z + a)*zi*p + a0 bailout: (|z| <= bailval) && (|zd| > 1) default: title = "Cube4crit" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param geomtree caption = "Geometry" default = 0 hint = "This defines the connection geometry of the critical points." endparam param n caption = "Order" default = 3 hint = "This defines the order of the Chebyshev polynomial." endparam param nd caption = "Destination" default = 0 hint = "This defines the destination critical point." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param lowfix caption = "Fix Lower" default = false hint = "Sends critical value -1 to a fixed point instead of +1." endparam param bailany caption = "Black Chaos" default = true hint = "Bail out on hitting any attractor." endparam param windage caption = "Kentucky" default = 1.0 hint = "Windage for the convergance criteria." endparam param fold caption = "Fold up" default = false hint = "Fold a symmetry at 0.5." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 1.28e26 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jube4crit" seed = #pixel power = power n = n nd = nd bailany = bailany windage = windage geomtree = geomtree lowfix = lowfix insout = insout fold = fold bailout = bailout } Jube4crit { ; Generic Julia set init: complex s = @seed if @fold if @geomtree == 35 s = sqrt(1/s + 1) s = 3*(s - 1)/(s + 1) elseif @geomtree == 30 s = sqrt(1/(sqrt(1/s + 1.25) + 0.5) - 1) elseif @geomtree == 29 || @geomtree == 33 s = sqrt(1/(sqrt(s) + 0.5) - 1) elseif @geomtree == 21 s = s^(1/3) elseif @geomtree == 19 || @geomtree == 32 s = sqrt(9/s + 9) s = -(s + 1)/(s + 3) elseif @geomtree == 3 s = sqrt(s) s = flip(2)/(s + flip(1)) - 1 s = s^(1/3) complex cr3 = -0.5*(sqrt(3) + flip(1)) s = (cr3*s*flip(1) + 1)/(sqrt(3)*(s*flip(1) + cr3)) elseif @geomtree == 0 || @geomtree == 1 s = flip(2)/(s + flip(1)) - 1 s = s^(1/3) complex cr3 = -0.5*(sqrt(3) + flip(1)) s = (cr3*s*flip(1) + 1)/(sqrt(3)*(s*flip(1) + cr3)) else s = sqrt(s) - 0.5 endif endif if @insout s = 1/s - 1/3 endif complex a = s complex b = -(2 + 3*a)/(1 + 2*a) complex c = 0 s = a*b if @geomtree == 46 a = 1/a + 1 c = 0 p = -a/(1/3 + (a - 1/3)/(sqr(a)*(a - 3))) a0 = a + p/3 a = -1/3 b = -3 s = a0 elseif @geomtree == 45 a = 1/a + 1 c = 0 a0 = a p = (1 - a)*sqr(a)*(a - 3)/(a - 1/3) a = -1/3 b = -3 s = 1 elseif @geomtree == 44 a = 1/a + 1 c = 3*a a0 = a p = (1/a - a)*c a = -1/3 b = -3 s = 0 elseif @geomtree == 43 a = 1/a c = 0 a0 = 1 p = a a = -1/3 b = -3 s = 1 elseif @geomtree == 42 c = -sqr(a)*(a - 3)/(a - 1/3) a0 = 1 p = (a - 1)*(2*c/3 - 2)*1.5 a = -1/3 b = -3 s = 0 elseif @geomtree == 41 a = 1/a + 1 c = -sqr(a)*(a - 3)/(a - 1/3) a0 = a p = -a0*(2*c/3 - 2)*1.5 a = -1/3 b = -3 s = 0 elseif @geomtree == 40 a = 1/a + 1 c = -sqr(a)*(a - 3)/(a - 1/3) a0 = a p = c*(1 - a0) a = -1/3 b = -3 s = 1 elseif @geomtree == 39 c = -sqr(a)*(a - 3)/(a - 1/3) a0 = 3 p = c*(a - a0) a = -1/3 b = -3 s = 1 elseif @geomtree == 38 c = 0 a0 = 3 p = a a = -1/3 b = -3 s = 1 elseif @geomtree == 37 c = 0 a0 = a p = -sqr(a)*sqr(a - 3)/(a - 1/3) a = -1/3 b = -3 s = 1 elseif @geomtree == 36 c = 0 a0 = a p = -a*sqr(a)*(a - 3)/(a - 1/3) a = -1/3 b = -3 s = 1 elseif @geomtree == 35 c = 0 p = a a0 = 0 a = -1/3 b = -3 s = 1 elseif @geomtree == 34 a = 1/a a0 = real(a) b = 0.5*(1/a0 - a0) + 0.5*flip(imag(a)) a = -1/conj(b) c = conj(a0*b) p = -conj(b)*(1 + sqr(a0)) s = 0.25*(-(b + 3*a) + sqrt(sqr(b + 3*a) - 16*a*b)) elseif @geomtree == 33 a0 = a b = -(1 - sqr(sqr(a0)))/(a0*(1 - sqr(a0))) a = 1/b c = -a0*b p = b*(sqr(a0) - 1) s = 0.25*(-(b + 3*a) + sqrt(sqr(b + 3*a) - 16*a*b)) elseif @geomtree == 32 c = 0 p = -b*s a0 = 0 elseif @geomtree == 31 a = 1/a a0 = real(a) b = -0.5*(1/a0 + a0) + flip(imag(a)) a = 1/conj(b) c = conj(a0*b) p = conj(b)*(1 - sqr(a0)) s = 0.25*(-(b + 3*a) + sqrt(sqr(b + 3*a) - 16*a*b)) elseif @geomtree == 30 a0 = a b = -(1 + sqr(sqr(a0)))/(a0*(1 + sqr(a0))) a = 1/b c = a0*b p = b*(1 - sqr(a0)) s = 0.25*(-(b + 3*a) + sqrt(sqr(b + 3*a) - 16*a*b)) elseif @geomtree == 29 a0 = a b = -0.5*(1/a0 + a0) a = 1/b c = a0*b p = b*(1 - sqr(a0)) s = 0.25*(-(b + 3*a) + sqrt(sqr(b + 3*a) - 16*a*b)) elseif @geomtree == 28 complex di = -b complex ds = -a complex d0 = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 27 complex di = s complex d0 = -a complex ds = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 26 complex di = 1 complex ds = -b complex d0 = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 25 complex di = s complex ds = -b complex d0 = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 24 complex di = 0 complex ds = -b complex d0 = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 23 complex di = -b complex d0 = 1 complex ds = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 22 complex di = s complex d0 = 1 complex ds = -a/(1 + 2*a) c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 21 complex di = s complex d1 = -a complex d0 = 1 c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 20 a = 1/a c = 0 a0 = 0 b = a a = -1/conj(b) p = b s = 0.25*(-(b + 3*a) + sqrt(sqr(b + 3*a) - 16*a*b)) elseif @geomtree == 19 c = 0 p = b*s a0 = 0 elseif @geomtree == 18 complex di = 0 complex d1 = s complex d0 = -a c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 17 complex di = 1 complex d1 = 0 complex d0 = -a c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 16 complex di = 1 complex d1 = -b complex d0 = -a c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 15 complex di = 1 complex d1 = 0 complex d0 = -a/(1 + 2*a) c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 14 complex di = 0 complex d1 = -b complex d0 = -a c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 13 complex di = -b complex d1 = 0 complex d0 = 1 c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 12 complex di = -a/(1 + 2*a) complex ds = -a complex d0 = -b c = (di - ds)*(1 + 2*a)*s*sqr(b)/(d0 - ds) p = c*(d0 - di) a0 = di elseif @geomtree == 11 c = 0 a0 = s p = (a0 + a)/(1 + 2*a) elseif @geomtree == 10 c = 0 a0 = 1 p = (a0*(1 + 2*a) + a)*s*sqr(b) elseif @geomtree == 9 c = 0 a0 = s p = (a0*(1 + 2*a) + a)*s*sqr(b) elseif @geomtree == 8 complex di = -b complex d1 = s complex d0 = 1 c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 7 complex di = s complex d1 = 0 complex d0 = 1 c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 6 complex di = s complex d1 = -b complex d0 = -a/(1 + 2*a) c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 5 complex di = -a complex d1 = 0 complex d0 = 1 c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 4 complex di = -a complex d1 = -b complex d0 = -a/(1 + 2*a) c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 3 complex di = -a complex d0 = -b complex d1 = -a/(1 + 2*a) c = (di - d1)/((1 + 2*a)*(d0 - d1)) p = c*(d0 - di) a0 = di elseif @geomtree == 2 c = 0 p = s/(1 + 2*a) a0 = s elseif @geomtree == 1 c = 0 p = 1/(1 + 2*a) a0 = 1 else c = sqr(1 + a)/(sqr(a)*(1 + 2*a)) p = -2*c a0 = -b endif complex bailval = @bailout/|p| complex pd = 0 if @bailany pd = -2*p*sqrt(1/3)*@windage endif zd = @bailout z = #pixel if @geomtree == 0 || @geomtree == 3 || @geomtree == 4 z = 0.25/z + s endif loop: zi = 1/((z + b)*sqr(z) + c*(z + a)) if @bailany zd = zd*pd*sqr(zi)*z*((z + 0.5*(b + 3*a))*z + a*b) endif z = (z + a)*zi*p + a0 bailout: (|z| <= bailval) && (|zd| > 1) default: title = "Jube4crit" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param geomtree caption = "Geometry" default = 0 hint = "This defines the connection geometry of the critical points." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param nd caption = "Destination" default = 0 hint = "This defines the destination critical point." endparam param insout caption = "Inside Out" default = true hint = "Remaps infinity to a pole." endparam param lowfix caption = "Fix Lower" default = false hint = "Sends critical value -1 to a fixed point instead of +1." endparam param fold caption = "Fold up" default = false hint = "Fold a symmetry at 0." endparam param windage caption = "Kentucky" default = 1.0 hint = "Windage for the convergance criteria." endparam param bailany caption = "Black Chaos" default = false hint = "Bail out on hitting any attractor." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Cube4crit" power = power bailout = bailout } Quad2crit { ; Generic Mandelbrot set init: complex s = #pixel complex a0 = 0 complex a1 = 1 if @geomtree == 23 complex u = s if @uhp u = (u - flip(1))/(u + flip(1)) endif float hr = real(@hypcent) float hi = imag(@hypcent) u = ((hr + 1)*u + (hr - 1))/((hr - 1)*u + (hr + 1)) u = ((hi + 1)*u + flip(hi - 1))/(-flip(hi - 1)*u + (hi + 1)) if |u| > 1 u = 1/u endif complex fu00 = (1.83006188130296, 0) complex fu01 = (1.53268603745129, 0) complex fu02 = (1.53268603745129, 0) complex fu03 = (1.83006188130296, 0) complex fu10 = (4.97479722366339, 0) complex fu11 = (3.49069798919486, 3.40053451163194) complex fu12 = (3.49069798919486, -3.40053451163194) complex fu13 = (4.97479722366339, 0) complex fu20 = (1.60062320016132, 0) complex fu21 = (0, 1.24979783520963) complex fu22 = (0, -1.24979783520963) complex fu23 = (1.60062320016132, 0) complex fu30 = (4.97479722366339, 0) complex fu31 = (-3.49069798919486, 3.40053451163194) complex fu32 = (-3.49069798919486, -3.40053451163194) complex fu33 = (4.97479722366339, 0) complex fu40 = (1.83006188130296, 0) complex fu41 = (-1.53268603745129, 0) complex fu42 = (-1.53268603745129, 0) complex fu43 = (1.83006188130296, 0) complex fu50 = (4.97479722366339, 0) complex fu51 = (-3.49069798919486, -3.40053451163194) complex fu52 = (-3.49069798919486, 3.40053451163194) complex fu53 = (4.97479722366339, 0) complex fu60 = (1.60062320016132, 0) complex fu61 = (0, -1.24979783520963) complex fu62 = (0, 1.24979783520963) complex fu63 = (1.60062320016132, 0) complex fu70 = (4.97479722366339, 0) complex fu71 = (3.49069798919486, -3.40053451163194) complex fu72 = (3.49069798919486, 3.40053451163194) complex fu73 = (4.97479722366339, 0) complex vu00 = (-6.80319462258186, 0) complex vu01 = (-6.729298408655, 0) complex vu02 = (-6.729298408655, 0) complex vu03 = (-6.80319462258186, 0) complex vu10 = (-1.7689197870267, 0) complex vu11 = (-1.23660891469389, 0.774516368474021) complex vu12 = (-1.23660891469389, -0.774516368474021) complex vu13 = (-1.7689197870267, 0) complex vu20 = (-3.6669160814782, 0) complex vu21 = (0, 3.52792765637327) complex vu22 = (0, -3.52792765637327) complex vu23 = (-3.6669160814782, 0) complex vu30 = (-1.7689197870267, 0) complex vu31 = (1.2366089146939, 0.774516368474026) complex vu32 = (1.2366089146939, -0.774516368474026) complex vu33 = (-1.7689197870267, 0) complex vu40 = (-6.80319462258187, 0) complex vu41 = (6.72929840865501, 0) complex vu42 = (6.72929840865501, 0) complex vu43 = (-6.80319462258187, 0) complex vu50 = (-1.7689197870267, 0) complex vu51 = (1.23660891469389, -0.774516368474024) complex vu52 = (1.23660891469389, 0.774516368474024) complex vu53 = (-1.7689197870267, 0) complex vu60 = (-3.6669160814782, 0) complex vu61 = (0, -3.52792765637328) complex vu62 = (0, 3.52792765637328) complex vu63 = (-3.6669160814782, 0) complex vu70 = (-1.7689197870267, 0) complex vu71 = (-1.2366089146939, -0.77451636847402) complex vu72 = (-1.2366089146939, 0.77451636847402) complex vu73 = (-1.7689197870267, 0) complex umata = (1.81711731221675, 0.743926303451645) complex umatb = (-0.984102273962777, -1.37363910315131) complex umatc = (-0.984102273962777, 1.37363910315131) complex umatd = (1.81711731221675, -0.743926303451645) complex ffun = (0.775238238163461, 0.66715237172243) float ffnm = 0.0460866130 complex vfun = (0.915597613665918, 0.822040232602688) float vfnm = 0.5140691341 bool better = true complex t = 0 while better better = false t = (fu00*u + fu01)/(fu02*u + fu03) if |t| < |u| better = true u = t endif t = (fu10*u + fu11)/(fu12*u + fu13) if |u + ffun| < ffnm better = true u = t endif t = (fu20*u + fu21)/(fu22*u + fu23) if |t| < |u| better = true u = t endif t = (fu30*u + fu31)/(fu32*u + fu33) if |u - conj(ffun)| < ffnm better = true u = t endif t = (fu40*u + fu41)/(fu42*u + fu43) if |t| < |u| better = true u = t endif t = (fu50*u + fu51)/(fu52*u + fu53) if |u - ffun| < ffnm better = true u = t endif t = (fu60*u + fu61)/(fu62*u + fu63) if |t| < |u| better = true u = t endif t = (fu70*u + fu71)/(fu72*u + fu73) if |u + conj(ffun)| < ffnm better = true u = t endif endwhile complex v = (umata*u + umatb)/(umatc*u + umatd) better = true while better better = false t = (vu00*v + vu01)/(vu02*v + vu03) if |t| < |v| better = true v = t endif t = (vu10*v + vu11)/(vu12*v + vu13) if |v + conj(vfun)| < vfnm better = true v = t endif t = (vu20*v + vu21)/(vu22*v + vu23) if |t| < |v| better = true v = t endif t = (vu30*v + vu31)/(vu32*v + vu33) if |v - vfun| < vfnm better = true v = t endif t = (vu40*v + vu41)/(vu42*v + vu43) if |t| < |v| better = true v = t endif t = (vu50*v + vu51)/(vu52*v + vu53) if |v - conj(vfun)| < vfnm better = true v = t endif t = (vu60*v + vu61)/(vu62*v + vu63) if |t| < |v| better = true v = t endif t = (vu70*v + vu71)/(vu72*v + vu73) if |v + vfun| < vfnm better = true v = t endif endwhile if |v| > |u| complex uu = u*u complex sz = \ ((((((((((((((((((((((((((((((50.8285043301517*uu + \ 21.1822729720076)*uu + \ 16.765948907338)*uu + \ 43.7961380207474)*uu + \ 1.50138455967125)*uu + \ 27.1782031497161)*uu + \ -7.44269317223692)*uu + \ -0.226471541200099)*uu + \ 3.63505365756027)*uu + \ -20.2540399540202)*uu + \ -0.954747741789354)*uu + \ -20.8675379240415)*uu + \ 1.99779330425055)*uu + \ -12.1941098477131)*uu + \ -3.14790838392742)*uu + \ 1.49016780408159)*uu + \ -2.15269122870894)*uu + \ 5.29090496756078)*uu + \ -0.544075835468025)*uu + \ 4.7195308772554)*uu + \ 4.53089725317355)*uu + \ 1.96072189949404)*uu + \ 3.84622774686998)*uu + \ -1.12491301047044)*uu + \ 3.1611075885776)*uu + \ -1.48090275608658)*uu + \ 0.265955064052117)*uu + \ -0.914809768957607)*uu + \ -0.80558574702971)*uu + \ -0.43271738253076)*uu + \ -0.948850047211325)*uu + \ -0.266318358487369 complex nz = \ ((((3.34932481372634*uu + \ -2.29108516679601)*uu + \ -3.56428044938751)*uu + \ 3.17921539381276)*uu + \ 0.429033840461224)*uu + \ 1 complex dz = \ ((((5.4682410869534*uu + \ -1.00326433962286)*uu + \ -4.63083659896653)*uu + \ 0.429033840461224)*uu + \ 1)*uu complex sw = \ (((((((((((((((((((((((((((((((1244.55156098388*uu + \ -1044.85318148304)*uu + \ 1365.11006115432)*uu + \ 734.195716441453)*uu + \ 710.618884533585)*uu + \ 1358.98468918307)*uu + \ 15.7112863617801)*uu + \ 1060.64875311286)*uu + \ -123.815283338864)*uu + \ 326.295201175061)*uu + \ -111.590370800305)*uu + \ -204.712545025044)*uu + \ -25.2704061171468)*uu + \ -328.32887144145)*uu + \ -76.399453271931)*uu + \ -196.33361527777)*uu + \ -81.7934486435375)*uu + \ -31.843023775531)*uu + \ -77.2679391900259)*uu + \ 57.5337428147105)*uu + \ -26.495947466048)*uu + \ 57.9291962404693)*uu + \ 7.28566661633742)*uu + \ 28.7609465707033)*uu + \ 22.536642650597)*uu + \ 8.788506347703)*uu + \ 12.0922840394811)*uu + \ -0.831988373488552)*uu + \ 1.52752556995338)*uu + \ -1.18976521806274)*uu + \ -4.12466463652027)*uu + \ -0.547056822581384)*u complex nw = \ (((((((((((229.924588338754*uu + \ -88.0861356394314)*uu + \ -397.88217487117)*uu + \ 109.673495603488)*uu + \ 246.508977532891)*uu + \ -38.4869271353045)*uu + \ -40.9069618845349)*uu + \ -1.05742260136996)*uu + \ -5.387448424406)*uu + \ 8.74182600327833)*uu + \ -14.6048749660359)*uu + \ 0.406788704973983)*uu + \ 1 complex dw = \ ((((((((((-69.9228520720704*uu + \ 32.0720606924251)*uu + \ 143.624005894562)*uu + \ -54.3211135343213)*uu + \ -120.346543338335)*uu + \ 34.7296841165408)*uu + \ 51.4647412805411)*uu + \ -9.93392805301499)*uu + \ -11.2319601794271)*uu + \ 1.07258460115308)*uu + \ 1)*uu*uu*u else complex vv = v*v complex sz = \ ((((((((((((((((((((((((((((((-329.896829137034*vv + \ 535.632662850714)*vv + \ -288.859170603267)*vv + \ -136.186896677415)*vv + \ 283.761403759031)*vv + \ -217.930463962149)*vv + \ -23.5363445826578)*vv + \ 171.955234482815)*vv + \ -124.314467349942)*vv + \ 25.6165980308276)*vv + \ 85.6870647250078)*vv + \ -88.060327555702)*vv + \ 26.8279872568985)*vv + \ 26.7712280038119)*vv + \ -58.9580364407965)*vv + \ 18.0525146698689)*vv + \ 13.7677240678965)*vv + \ -26.0102371357958)*vv + \ 19.4593783521772)*vv + \ 7.19940203377203)*vv + \ -13.4112462232443)*vv + \ 14.0437317095019)*vv + \ -0.927034606640644)*vv + \ -8.0940195654052)*vv + \ 4.36962946466608)*vv + \ -2.00770760225374)*vv + \ -3.26524229220525)*vv + \ 3.114507368033)*vv + \ -0.477293557447735)*vv + \ -0.634207615660206)*vv + \ 2.02989764260562)*vv + \ 0.730031515734547 complex nz = \ (((((((-4.99606287451219*vv + \ 2.81979769244912)*vv + \ 9.37398018603044)*vv + \ -4.90048917295332)*vv + \ -9.8354733320135)*vv + \ 7.18033780423563)*vv + \ 4.47509521442272)*vv + \ -4.33082353513855)*vv complex dz = \ (((((((6.94353421608628*vv + \ -4.11293465385055)*vv + \ -11.9219954315396)*vv + \ 4.08930170614781)*vv + \ 10.8119014669575)*vv + \ -1.90191994136891)*vv + \ -4.75037059355414)*vv + \ 0.143441339218172)*vv + \ 1 complex sw = \ (((((((((((((((((((((((((((((((-93431.4994472434*vv + \ 58158.071042987)*vv + \ 8798.90521834021)*vv + \ -41533.5615653787)*vv + \ 32872.5932348587)*vv + \ -3114.45150978675)*vv + \ -17679.9057595404)*vv + \ 16558.9464899814)*vv + \ -4762.53420355266)*vv + \ -6531.3413236715)*vv + \ 8166.50724876673)*vv + \ -3113.82729701504)*vv + \ -1797.28687520996)*vv + \ 3756.97369928781)*vv + \ -1903.94716932743)*vv + \ -372.84232513744)*vv + \ 1407.02718322058)*vv + \ -1055.56571478838)*vv + \ -29.2877696137142)*vv + \ 485.543604170474)*vv + \ -441.109754141229)*vv + \ 92.5527983672403)*vv + \ 178.668067972833)*vv + \ -161.840442962114)*vv + \ 70.0359016559377)*vv + \ 38.5132396817261)*vv + \ -55.6468209924833)*vv + \ 17.4224965414547)*vv + \ 2.07279297810727)*vv + \ -16.5157882429291)*vv + \ 6.21879960338274)*vv + \ 1.19457099958621)*v complex nw = \ (((((((((((((((((((-262.016818978863*vv + \ 799.2917646746)*vv + \ 342.79241953858)*vv + \ -2709.02794743515)*vv + \ -75.7903919274321)*vv + \ 5154.96845769143)*vv + \ -341.050352953843)*vv + \ -6587.67925347603)*vv + \ 452.832004767186)*vv + \ 6127.3192751211)*vv + \ -384.03255866431)*vv + \ -4143.63025839381)*vv + \ 301.635914862471)*vv + \ 1972.31540378859)*vv + \ -236.890585569765)*vv + \ -580.197272142091)*vv + \ 121.145941529601)*vv + \ 67.6766565752481)*vv + \ -21.6329548231141)*vv + \ 2.14695963305839)*v complex dw = \ (((((((((((((((((((127.043207461366*vv + \ -188.132006786125)*vv + \ -461.751934961566)*vv + \ 663.331673122341)*vv + \ 958.239830999318)*vv + \ -1198.7253267254)*vv + \ -1354.26521499883)*vv + \ 1367.66300275241)*vv + \ 1398.79606235531)*vv + \ -1068.32881643713)*vv + \ -1068.74261587433)*vv + \ 581.382019889864)*vv + \ 602.395750659478)*vv + \ -217.820599435005)*vv + \ -244.393535021604)*vv + \ 52.919720792736)*vv + \ 68.2263417416114)*vv + \ -7.30912575066399)*vv + \ -11.8373475755168)*vv + \ 0.358603348045432)*vv + \ 1 endif sz = 7.23841523765595*(sz + nz/dz) sw = 140.964168155818*(sw + nw/dw) if @radical complex qrad = sqrt((((sqr(sz) - 2090)*sz + 25460)*sz - 111215)*sz + 181028) if |sw - qrad| < |sw + qrad| sw = qrad else sw = -qrad endif endif s = 5/(sz - 7) + 0.5 a0 = 0.5*(((-200*sz + 8600)*sz - 55000)*sz + 72200 + 8*sqrt(5)*(sz - 17)*sw)/\ ((((sz - 108)*sz + 3374)*sz - 24732)*sz + 52441) p = (s - 1)/(1 - 0.5*a0) zd = 1 + p*0.5/a0 elseif @geomtree == 22 float w1 = 2.870250260749487538 complex w3 = (2.87865133457600359, 1.43512513037474377) float sh = round(0.5*real(s)/real(w3)) s = s - 2*w3*sh sh = round(0.5*imag(s)/w1) s = s - 2*flip(w1)*sh float g2 = 0.06783839755430011101 float g3 = -0.014876800746431961231 float c2 = g2/20 float c3 = g3/28 float c4 = c2*c2/3 float c5 = 3*c2*c3/11 float c6 = (c3*c3 + 2*c2*c4)/13 float c7 = (c2*c5 + c3*c4)/10 float c8 = 3*(2*c2*c6 + 2*c3*c5 + c4*c4)/85 float c9 = (c2*c7 + c3*c6 + c4*c5)/19 float c10 = (2*c2*c8 + 2*c3*c7 + 2*c4*c6 + c5*c5)/49 s = s*0.25 complex ss = sqr(s) complex si = 1/s complex ssi = sqr(si) complex u = ssi + \ ((((((((c10*ss + \ c9)*ss + c8)*ss + c7)*ss + c6)*ss + \ c5)*ss + c4)*ss + c3)*ss + c2)*ss complex r = -2*si*ssi + \ ((((((((18*c10*ss + \ 16*c9)*ss + 14*c8)*ss + 12*c7)*ss + 10*c6)*ss + \ 8*c5)*ss + 6*c4)*ss + 4*c3)*ss + 2*c2)*s complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 ; complex r1 = sqrt(4*u*u*u - 11*u/4 - 3/8) ; if |r - r1| < |r + r1| ; r = r1 ; else ; r = -r1 ; endif r = r/sqrt(0.22556329082039276555) u = -u + 0.38992456788222675 r = r/sqr(u) s = 1/u - 0.94696532812840456026 a0 = (((2*s - 1)*s - 6)*s + 2 + r)*sqr(s)/\ (((((s + 1)*s - 4)*s - 2)*s + 3)*s - 1) complex p = (s/(1 + s) - s)/(1 - 0.5*a0) a1 = s zd = s + p*0.5/a0 elseif @geomtree == 21 float w2 = 1.3728695590448768360 float w1 = 1.5470797535511201732 float sh = round(0.5*real(s)/w1) s = s - 2*w1*sh sh = round(0.5*imag(s)/w2) s = s - 2*flip(w2)*sh float g2 = 11/4 float g3 = -3/8 float c2 = g2/20 float c3 = g3/28 float c4 = c2*c2/3 float c5 = 3*c2*c3/11 float c6 = (c3*c3 + 2*c2*c4)/13 float c7 = (c2*c5 + c3*c4)/10 float c8 = 3*(2*c2*c6 + 2*c3*c5 + c4*c4)/85 float c9 = (c2*c7 + c3*c6 + c4*c5)/19 float c10 = (2*c2*c8 + 2*c3*c7 + 2*c4*c6 + c5*c5)/49 s = s*0.25 complex ss = sqr(s) complex si = 1/s complex ssi = sqr(si) complex u = ssi + \ ((((((((c10*ss + \ c9)*ss + c8)*ss + c7)*ss + c6)*ss + \ c5)*ss + c4)*ss + c3)*ss + c2)*ss complex r = -2*si*ssi + \ ((((((((18*c10*ss + \ 16*c9)*ss + 14*c8)*ss + 12*c7)*ss + 10*c6)*ss + \ 8*c5)*ss + 6*c4)*ss + 4*c3)*ss + 2*c2)*s complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 s = 1 - 1/(u + 5/4) complex t = (1 - 3*s + 2*sqr(s) + sqr(1 - s)*r)/(2*sqr(s)) a0 = 2*s*(s*(t - 2) + 1)/(sqr(s)*(t - 1) - s + 1) complex p = (s - 1)/(1 - 0.5*a0) zd = 1 + p*0.5/a0 elseif @geomtree == 20 s = 1/s complex t = s/(1 + s) complex a0 = (2*s*(s - t) - 2*sqr(s)*(s - 1))/(s - t - sqr(s)*(s - 1)) complex p = (t - s)/(1 - 0.5*a0) a1 = s zd = a1 + p*0.5/a0 elseif @geomtree == 19 float w1 = 1.3254912396824867143 complex w3 = (1.486006467050162426, 0.6627456198412433572) float sh = round(0.5*real(s)/real(w3)) s = s - 2*w3*sh sh = round(0.5*imag(s)/w1) s = s - 2*flip(w1)*sh float g2 = 450/216 float g3 = -253/216 float c2 = g2/20 float c3 = g3/28 float c4 = c2*c2/3 float c5 = 3*c2*c3/11 float c6 = (c3*c3 + 2*c2*c4)/13 float c7 = (c2*c5 + c3*c4)/10 float c8 = 3*(2*c2*c6 + 2*c3*c5 + c4*c4)/85 float c9 = (c2*c7 + c3*c6 + c4*c5)/19 float c10 = (2*c2*c8 + 2*c3*c7 + 2*c4*c6 + c5*c5)/49 s = s*0.25 complex ss = sqr(s) complex si = 1/s complex ssi = sqr(si) complex u = ssi + \ ((((((((c10*ss + \ c9)*ss + c8)*ss + c7)*ss + c6)*ss + \ c5)*ss + c4)*ss + c3)*ss + c2)*ss complex r = -2*si*ssi + \ ((((((((18*c10*ss + \ 16*c9)*ss + 14*c8)*ss + 12*c7)*ss + 10*c6)*ss + \ 8*c5)*ss + 6*c4)*ss + 4*c3)*ss + 2*c2)*s complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 ; complex r1 = sqrt(4*u*u*u - 11*u/4 - 3/8) ; if |r - r1| < |r + r1| ; r = r1 ; else ; r = -r1 ; endif s = 2*(111 - 36*(u + r))/((144*u + 120)*u + 277) a0 = -u + 13/12 complex p = (s - 1)/(1 - 0.5*a0) zd = 1 + p*0.5/a0 elseif @geomtree == 18 complex u = s complex a0 = (1 - 4*sqr(u))*0.5 complex p = -4/((4*u + 4)*u + 5) zd = 1 + p*0.5/a0 elseif @geomtree == 17 complex a0 = 1/s + 1 complex p = 1/(a0 - 2) zd = 1 + p*0.5/a0 elseif @geomtree == 16 complex t = 1/s + 1 a0 = 2*t*((t - 1)*t + 1)/(((t - 1)*t + 1)*t + 1) complex p = (((t - 2)*t + 2)*sqr(t) - 1)/((t - 2)*t + 2) zd = 1 + p*0.5/a0 elseif @geomtree == 15 s = flip(1)*s float w1 = 1.3728695590448768360 float w2 = 1.5470797535511201732 float sh = round(0.5*real(s)/w1) s = s - 2*w1*sh sh = round(0.5*imag(s)/w2) s = s - 2*flip(w2)*sh float g2 = 11/4 float g3 = 3/8 float c2 = g2/20 float c3 = g3/28 float c4 = c2*c2/3 float c5 = 3*c2*c3/11 float c6 = (c3*c3 + 2*c2*c4)/13 float c7 = (c2*c5 + c3*c4)/10 float c8 = 3*(2*c2*c6 + 2*c3*c5 + c4*c4)/85 float c9 = (c2*c7 + c3*c6 + c4*c5)/19 float c10 = (2*c2*c8 + 2*c3*c7 + 2*c4*c6 + c5*c5)/49 s = s*0.25 complex ss = sqr(s) complex si = 1/s complex ssi = sqr(si) complex u = ssi + \ ((((((((c10*ss + \ c9)*ss + c8)*ss + c7)*ss + c6)*ss + \ c5)*ss + c4)*ss + c3)*ss + c2)*ss complex r = -2*si*ssi + \ ((((((((18*c10*ss + \ 16*c9)*ss + 14*c8)*ss + 12*c7)*ss + 10*c6)*ss + \ 8*c5)*ss + 6*c4)*ss + 4*c3)*ss + 2*c2)*s complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 ; complex r1 = sqrt(4*u*u*u - 11*u/4 - 3/8) ; if |r - r1| < |r + r1| ; r = r1 ; else ; r = -r1 ; endif complex t = (flip(8)*r - 9 + 16*sqr(u))/(16*sqr(u) + 8*u -19) s = 1/(u - 5/4) + 1 complex p = (sqr(t) + s - 1)/(1 - t) a0 = 2*(1 + (1 - s)/p) zd = 1 + p*0.5/a0 elseif @geomtree == 14 s = 1/s a1 = 0 a0 = 1 complex p = s zd = p*0.5/a0 elseif @geomtree == 13 s = 1/s + 0.5*(3 - sqrt(5)) complex a0 = (4*sqr(s) - 2*s)/(s - 1 + sqr(s)) complex p = (s - 1)/(1 - 0.5*a0) zd = 1 + p*0.5/a0 elseif @geomtree == 12 complex p = -1/(1 - 0.5*s) complex a0 = s zd = 1 + p*0.5/a0 elseif @geomtree == 11 s = sqrt(s) complex a0 = s complex ss = sqr(s) complex b = (sqr(sqr(ss)) - 1)/(2*s*ss*(ss - 1)) complex p = 0.5*(sqrt(sqr(b) - 4) - b) complex a1 = s*p p = p - ss*p zd = a0 elseif @geomtree == 10 s = 1/s + 1 complex p = 4*s*(s - 1)/(2 - s) complex a0 = s zd = 1 + p*0.5/a0 elseif @geomtree == 9 s = 1/s + 1 complex p = (s - 1)/(1 - 0.5*s) complex a0 = s zd = 1 + p*0.5/a0 elseif @geomtree == 8 complex p = -1 complex a0 = s zd = 1 + p*0.5/a0 elseif @geomtree == 7 s = 1/s + 1 complex p = sqr(s) - 1 complex a0 = 2*s/(s + 1) zd = 1 + p*0.5/a0 elseif @geomtree == 6 s = 1/s + 4 complex p = s complex a0 = 2 zd = 1 + p*0.25 elseif @geomtree == 5 s = 1/s complex p = s complex a0 = 1 zd = 1 + p*0.5 elseif @geomtree == 4 if @insout s = 1/s endif complex a0 = s complex p = -2*s zd = 1 elseif @geomtree == 3 complex p = s complex a0 = sqrt(1 + 4*sqr(p)) zd = 2*p + a0 zd = (zd + 1/zd)*p + a0 elseif @geomtree == 2 s = (1 - s)/(1 + s) complex p = (1 - s)/(s + 1/s + 2) complex a0 = s + 2*p zd = 2*p + a0 elseif @geomtree == 1 complex p = s complex a0 = 1 + 2*s zd = 2*p + a0 else complex p = s complex a0 = 0 zd = 2*p + a0 endif complex pd = @windage*p/sqrt(2) z = @bailout loop: if @geomtree == 11 complex zi = 1/(sqr(zd) + a1) else complex zi = 1/zd endif if @geomtree <= 3 z = z*pd*(1 - sqr(zi)) zd = (zd + zi)*p + a0 elseif @geomtree == 11 z = -z*pd*2*zd*sqr(zi) zd = a0 + p*zi else z = z*pd*sqr(zi)*(a0*zi - 1) zd = a1 + p*zi*(1 - 0.5*a0*zi) endif bailout: |z| > |zd| default: title = "Quad2crit" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param geomtree caption = "Geometry" default = 0 hint = "This defines the connection geometry of the critical points." endparam param hypcent caption = "Hyperbolic Translation" default = (1,1) hint = "Move the origin around by a horizontal move followed \ by vertical move. (1, 2.85042103537095), (1, 1), \ (3.36274791875425, 1), (13.53249303123686, 2.85042103537095) \ center 4 of 6 Weierstrass points." endparam param uhp caption = "Half Plane" default = false hint = "half plane model of hyperbolic plane" endparam param radical caption = "Radical" default = false hint = "From a purist standpoint this is unnecessary. It helps \ coherence on zooms deeper than 1e8." endparam param n caption = "Order" default = 3 hint = "This defines the order of the Chebyshev polynomial." endparam param nd caption = "Destination" default = 0 hint = "This defines the destination critical point." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param lowfix caption = "Fix Lower" default = false hint = "Sends critical value -1 to a fixed point instead of +1." endparam param coslimit caption = "Cosine limit" default = false hint = "As order approaches infinity we get a cosine \ with chained critical points." endparam param fold caption = "Fold up" default = false hint = "Fold a symmetry at 0." endparam param windage caption = "Kentucky" default = 1.0 hint = "Windage for the convergance criteria." endparam param bailout caption = "Bailout value" default = 1e24 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Juad2crit" seed = #pixel power = power n = n nd = nd radical = radical hypcent = hypcent coslimit = coslimit geomtree = geomtree windage = windage lowfix = lowfix insout = insout fold = fold bailout = bailout } Juad2crit { ; Generic Julia set init: complex s = @seed complex a0 = 0 complex a1 = 1 if @geomtree == 23 complex u = s float hr = real(@hypcent) float hi = imag(@hypcent) u = ((hr + 1)*u + (hr - 1))/((hr - 1)*u + (hr + 1)) u = ((hi + 1)*u + flip(hi - 1))/(-flip(hi - 1)*u + (hi + 1)) if |u| > 1 u = 1/u endif complex fu00 = (1.83006188130296, 0) complex fu01 = (1.53268603745129, 0) complex fu02 = (1.53268603745129, 0) complex fu03 = (1.83006188130296, 0) complex fu10 = (4.97479722366339, 0) complex fu11 = (3.49069798919486, 3.40053451163194) complex fu12 = (3.49069798919486, -3.40053451163194) complex fu13 = (4.97479722366339, 0) complex fu20 = (1.60062320016132, 0) complex fu21 = (0, 1.24979783520963) complex fu22 = (0, -1.24979783520963) complex fu23 = (1.60062320016132, 0) complex fu30 = (4.97479722366339, 0) complex fu31 = (-3.49069798919486, 3.40053451163194) complex fu32 = (-3.49069798919486, -3.40053451163194) complex fu33 = (4.97479722366339, 0) complex fu40 = (1.83006188130296, 0) complex fu41 = (-1.53268603745129, 0) complex fu42 = (-1.53268603745129, 0) complex fu43 = (1.83006188130296, 0) complex fu50 = (4.97479722366339, 0) complex fu51 = (-3.49069798919486, -3.40053451163194) complex fu52 = (-3.49069798919486, 3.40053451163194) complex fu53 = (4.97479722366339, 0) complex fu60 = (1.60062320016132, 0) complex fu61 = (0, -1.24979783520963) complex fu62 = (0, 1.24979783520963) complex fu63 = (1.60062320016132, 0) complex fu70 = (4.97479722366339, 0) complex fu71 = (3.49069798919486, -3.40053451163194) complex fu72 = (3.49069798919486, 3.40053451163194) complex fu73 = (4.97479722366339, 0) complex vu00 = (-6.80319462258186, 0) complex vu01 = (-6.729298408655, 0) complex vu02 = (-6.729298408655, 0) complex vu03 = (-6.80319462258186, 0) complex vu10 = (-1.7689197870267, 0) complex vu11 = (-1.23660891469389, 0.774516368474021) complex vu12 = (-1.23660891469389, -0.774516368474021) complex vu13 = (-1.7689197870267, 0) complex vu20 = (-3.6669160814782, 0) complex vu21 = (0, 3.52792765637327) complex vu22 = (0, -3.52792765637327) complex vu23 = (-3.6669160814782, 0) complex vu30 = (-1.7689197870267, 0) complex vu31 = (1.2366089146939, 0.774516368474026) complex vu32 = (1.2366089146939, -0.774516368474026) complex vu33 = (-1.7689197870267, 0) complex vu40 = (-6.80319462258187, 0) complex vu41 = (6.72929840865501, 0) complex vu42 = (6.72929840865501, 0) complex vu43 = (-6.80319462258187, 0) complex vu50 = (-1.7689197870267, 0) complex vu51 = (1.23660891469389, -0.774516368474024) complex vu52 = (1.23660891469389, 0.774516368474024) complex vu53 = (-1.7689197870267, 0) complex vu60 = (-3.6669160814782, 0) complex vu61 = (0, -3.52792765637328) complex vu62 = (0, 3.52792765637328) complex vu63 = (-3.6669160814782, 0) complex vu70 = (-1.7689197870267, 0) complex vu71 = (-1.2366089146939, -0.77451636847402) complex vu72 = (-1.2366089146939, 0.77451636847402) complex vu73 = (-1.7689197870267, 0) complex umata = (1.81711731221675, 0.743926303451645) complex umatb = (-0.984102273962777, -1.37363910315131) complex umatc = (-0.984102273962777, 1.37363910315131) complex umatd = (1.81711731221675, -0.743926303451645) complex ffun = (0.775238238163461, 0.66715237172243) float ffnm = 0.0460866130 complex vfun = (0.915597613665918, 0.822040232602688) float vfnm = 0.5140691341 bool better = true complex t = 0 while better better = false t = (fu00*u + fu01)/(fu02*u + fu03) if |t| < |u| better = true u = t endif t = (fu10*u + fu11)/(fu12*u + fu13) if |u + ffun| < ffnm better = true u = t endif t = (fu20*u + fu21)/(fu22*u + fu23) if |t| < |u| better = true u = t endif t = (fu30*u + fu31)/(fu32*u + fu33) if |u - conj(ffun)| < ffnm better = true u = t endif t = (fu40*u + fu41)/(fu42*u + fu43) if |t| < |u| better = true u = t endif t = (fu50*u + fu51)/(fu52*u + fu53) if |u - ffun| < ffnm better = true u = t endif t = (fu60*u + fu61)/(fu62*u + fu63) if |t| < |u| better = true u = t endif t = (fu70*u + fu71)/(fu72*u + fu73) if |u + conj(ffun)| < ffnm better = true u = t endif endwhile complex v = (umata*u + umatb)/(umatc*u + umatd) better = true while better better = false t = (vu00*v + vu01)/(vu02*v + vu03) if |t| < |v| better = true v = t endif t = (vu10*v + vu11)/(vu12*v + vu13) if |v + conj(vfun)| < vfnm better = true v = t endif t = (vu20*v + vu21)/(vu22*v + vu23) if |t| < |v| better = true v = t endif t = (vu30*v + vu31)/(vu32*v + vu33) if |v - vfun| < vfnm better = true v = t endif t = (vu40*v + vu41)/(vu42*v + vu43) if |t| < |v| better = true v = t endif t = (vu50*v + vu51)/(vu52*v + vu53) if |v - conj(vfun)| < vfnm better = true v = t endif t = (vu60*v + vu61)/(vu62*v + vu63) if |t| < |v| better = true v = t endif t = (vu70*v + vu71)/(vu72*v + vu73) if |v + vfun| < vfnm better = true v = t endif endwhile if |v| > |u| complex uu = u*u complex sz = \ ((((((((((((((((((((((((((((((50.8285043301517*uu + \ 21.1822729720076)*uu + \ 16.765948907338)*uu + \ 43.7961380207474)*uu + \ 1.50138455967125)*uu + \ 27.1782031497161)*uu + \ -7.44269317223692)*uu + \ -0.226471541200099)*uu + \ 3.63505365756027)*uu + \ -20.2540399540202)*uu + \ -0.954747741789354)*uu + \ -20.8675379240415)*uu + \ 1.99779330425055)*uu + \ -12.1941098477131)*uu + \ -3.14790838392742)*uu + \ 1.49016780408159)*uu + \ -2.15269122870894)*uu + \ 5.29090496756078)*uu + \ -0.544075835468025)*uu + \ 4.7195308772554)*uu + \ 4.53089725317355)*uu + \ 1.96072189949404)*uu + \ 3.84622774686998)*uu + \ -1.12491301047044)*uu + \ 3.1611075885776)*uu + \ -1.48090275608658)*uu + \ 0.265955064052117)*uu + \ -0.914809768957607)*uu + \ -0.80558574702971)*uu + \ -0.43271738253076)*uu + \ -0.948850047211325)*uu + \ -0.266318358487369 complex nz = \ ((((3.34932481372634*uu + \ -2.29108516679601)*uu + \ -3.56428044938751)*uu + \ 3.17921539381276)*uu + \ 0.429033840461224)*uu + \ 1 complex dz = \ ((((5.4682410869534*uu + \ -1.00326433962286)*uu + \ -4.63083659896653)*uu + \ 0.429033840461224)*uu + \ 1)*uu complex sw = \ (((((((((((((((((((((((((((((((1244.55156098388*uu + \ -1044.85318148304)*uu + \ 1365.11006115432)*uu + \ 734.195716441453)*uu + \ 710.618884533585)*uu + \ 1358.98468918307)*uu + \ 15.7112863617801)*uu + \ 1060.64875311286)*uu + \ -123.815283338864)*uu + \ 326.295201175061)*uu + \ -111.590370800305)*uu + \ -204.712545025044)*uu + \ -25.2704061171468)*uu + \ -328.32887144145)*uu + \ -76.399453271931)*uu + \ -196.33361527777)*uu + \ -81.7934486435375)*uu + \ -31.843023775531)*uu + \ -77.2679391900259)*uu + \ 57.5337428147105)*uu + \ -26.495947466048)*uu + \ 57.9291962404693)*uu + \ 7.28566661633742)*uu + \ 28.7609465707033)*uu + \ 22.536642650597)*uu + \ 8.788506347703)*uu + \ 12.0922840394811)*uu + \ -0.831988373488552)*uu + \ 1.52752556995338)*uu + \ -1.18976521806274)*uu + \ -4.12466463652027)*uu + \ -0.547056822581384)*u complex nw = \ (((((((((((229.924588338754*uu + \ -88.0861356394314)*uu + \ -397.88217487117)*uu + \ 109.673495603488)*uu + \ 246.508977532891)*uu + \ -38.4869271353045)*uu + \ -40.9069618845349)*uu + \ -1.05742260136996)*uu + \ -5.387448424406)*uu + \ 8.74182600327833)*uu + \ -14.6048749660359)*uu + \ 0.406788704973983)*uu + \ 1 complex dw = \ ((((((((((-69.9228520720704*uu + \ 32.0720606924251)*uu + \ 143.624005894562)*uu + \ -54.3211135343213)*uu + \ -120.346543338335)*uu + \ 34.7296841165408)*uu + \ 51.4647412805411)*uu + \ -9.93392805301499)*uu + \ -11.2319601794271)*uu + \ 1.07258460115308)*uu + \ 1)*uu*uu*u else complex vv = v*v complex sz = \ ((((((((((((((((((((((((((((((-329.896829137034*vv + \ 535.632662850714)*vv + \ -288.859170603267)*vv + \ -136.186896677415)*vv + \ 283.761403759031)*vv + \ -217.930463962149)*vv + \ -23.5363445826578)*vv + \ 171.955234482815)*vv + \ -124.314467349942)*vv + \ 25.6165980308276)*vv + \ 85.6870647250078)*vv + \ -88.060327555702)*vv + \ 26.8279872568985)*vv + \ 26.7712280038119)*vv + \ -58.9580364407965)*vv + \ 18.0525146698689)*vv + \ 13.7677240678965)*vv + \ -26.0102371357958)*vv + \ 19.4593783521772)*vv + \ 7.19940203377203)*vv + \ -13.4112462232443)*vv + \ 14.0437317095019)*vv + \ -0.927034606640644)*vv + \ -8.0940195654052)*vv + \ 4.36962946466608)*vv + \ -2.00770760225374)*vv + \ -3.26524229220525)*vv + \ 3.114507368033)*vv + \ -0.477293557447735)*vv + \ -0.634207615660206)*vv + \ 2.02989764260562)*vv + \ 0.730031515734547 complex nz = \ (((((((-4.99606287451219*vv + \ 2.81979769244912)*vv + \ 9.37398018603044)*vv + \ -4.90048917295332)*vv + \ -9.8354733320135)*vv + \ 7.18033780423563)*vv + \ 4.47509521442272)*vv + \ -4.33082353513855)*vv complex dz = \ (((((((6.94353421608628*vv + \ -4.11293465385055)*vv + \ -11.9219954315396)*vv + \ 4.08930170614781)*vv + \ 10.8119014669575)*vv + \ -1.90191994136891)*vv + \ -4.75037059355414)*vv + \ 0.143441339218172)*vv + \ 1 complex sw = \ (((((((((((((((((((((((((((((((-93431.4994472434*vv + \ 58158.071042987)*vv + \ 8798.90521834021)*vv + \ -41533.5615653787)*vv + \ 32872.5932348587)*vv + \ -3114.45150978675)*vv + \ -17679.9057595404)*vv + \ 16558.9464899814)*vv + \ -4762.53420355266)*vv + \ -6531.3413236715)*vv + \ 8166.50724876673)*vv + \ -3113.82729701504)*vv + \ -1797.28687520996)*vv + \ 3756.97369928781)*vv + \ -1903.94716932743)*vv + \ -372.84232513744)*vv + \ 1407.02718322058)*vv + \ -1055.56571478838)*vv + \ -29.2877696137142)*vv + \ 485.543604170474)*vv + \ -441.109754141229)*vv + \ 92.5527983672403)*vv + \ 178.668067972833)*vv + \ -161.840442962114)*vv + \ 70.0359016559377)*vv + \ 38.5132396817261)*vv + \ -55.6468209924833)*vv + \ 17.4224965414547)*vv + \ 2.07279297810727)*vv + \ -16.5157882429291)*vv + \ 6.21879960338274)*vv + \ 1.19457099958621)*v complex nw = \ (((((((((((((((((((-262.016818978863*vv + \ 799.2917646746)*vv + \ 342.79241953858)*vv + \ -2709.02794743515)*vv + \ -75.7903919274321)*vv + \ 5154.96845769143)*vv + \ -341.050352953843)*vv + \ -6587.67925347603)*vv + \ 452.832004767186)*vv + \ 6127.3192751211)*vv + \ -384.03255866431)*vv + \ -4143.63025839381)*vv + \ 301.635914862471)*vv + \ 1972.31540378859)*vv + \ -236.890585569765)*vv + \ -580.197272142091)*vv + \ 121.145941529601)*vv + \ 67.6766565752481)*vv + \ -21.6329548231141)*vv + \ 2.14695963305839)*v complex dw = \ (((((((((((((((((((127.043207461366*vv + \ -188.132006786125)*vv + \ -461.751934961566)*vv + \ 663.331673122341)*vv + \ 958.239830999318)*vv + \ -1198.7253267254)*vv + \ -1354.26521499883)*vv + \ 1367.66300275241)*vv + \ 1398.79606235531)*vv + \ -1068.32881643713)*vv + \ -1068.74261587433)*vv + \ 581.382019889864)*vv + \ 602.395750659478)*vv + \ -217.820599435005)*vv + \ -244.393535021604)*vv + \ 52.919720792736)*vv + \ 68.2263417416114)*vv + \ -7.30912575066399)*vv + \ -11.8373475755168)*vv + \ 0.358603348045432)*vv + \ 1 endif sz = 7.23841523765595*(sz + nz/dz) sw = 140.964168155818*(sw + nw/dw) if @radical complex qrad = sqrt((((sqr(sz) - 2090)*sz + 25460)*sz - 111215)*sz + 181028) if |sw - qrad| < |sw + qrad| sw = qrad else sw = -qrad endif endif s = 5/(sz - 7) + 0.5 a0 = 0.5*(((-200*sz + 8600)*sz - 55000)*sz + 72200 + 8*sqrt(5)*(sz - 17)*sw)/\ ((((sz - 108)*sz + 3374)*sz - 24732)*sz + 52441) p = (s - 1)/(1 - 0.5*a0) zd = 1 + p*0.5/a0 elseif @geomtree == 22 float w1 = 2.870250260749487538 complex w3 = (2.87865133457600359, 1.43512513037474377) float sh = round(0.5*real(s)/real(w3)) s = s - 2*w3*sh sh = round(0.5*imag(s)/w1) s = s - 2*flip(w1)*sh float g2 = 0.06783839755430011101 float g3 = -0.014876800746431961231 float c2 = g2/20 float c3 = g3/28 float c4 = c2*c2/3 float c5 = 3*c2*c3/11 float c6 = (c3*c3 + 2*c2*c4)/13 float c7 = (c2*c5 + c3*c4)/10 float c8 = 3*(2*c2*c6 + 2*c3*c5 + c4*c4)/85 float c9 = (c2*c7 + c3*c6 + c4*c5)/19 float c10 = (2*c2*c8 + 2*c3*c7 + 2*c4*c6 + c5*c5)/49 s = s*0.25 complex ss = sqr(s) complex si = 1/s complex ssi = sqr(si) complex u = ssi + \ ((((((((c10*ss + \ c9)*ss + c8)*ss + c7)*ss + c6)*ss + \ c5)*ss + c4)*ss + c3)*ss + c2)*ss complex r = -2*si*ssi + \ ((((((((18*c10*ss + \ 16*c9)*ss + 14*c8)*ss + 12*c7)*ss + 10*c6)*ss + \ 8*c5)*ss + 6*c4)*ss + 4*c3)*ss + 2*c2)*s complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 ; complex r1 = sqrt(4*u*u*u - 11*u/4 - 3/8) ; if |r - r1| < |r + r1| ; r = r1 ; else ; r = -r1 ; endif r = r/sqrt(0.22556329082039276555) u = -u + 0.38992456788222675 r = r/sqr(u) s = 1/u - 0.94696532812840456026 a0 = (((2*s - 1)*s - 6)*s + 2 + r)*sqr(s)/\ (((((s + 1)*s - 4)*s - 2)*s + 3)*s - 1) complex p = (s/(1 + s) - s)/(1 - 0.5*a0) a1 = s zd = s + p*0.5/a0 elseif @geomtree == 21 float w2 = 1.3728695590448768360 float w1 = 1.5470797535511201732 float sh = round(0.5*real(s)/w1) s = s - 2*w1*sh sh = round(0.5*imag(s)/w2) s = s - 2*flip(w2)*sh float g2 = 11/4 float g3 = -3/8 float c2 = g2/20 float c3 = g3/28 float c4 = c2*c2/3 float c5 = 3*c2*c3/11 float c6 = (c3*c3 + 2*c2*c4)/13 float c7 = (c2*c5 + c3*c4)/10 float c8 = 3*(2*c2*c6 + 2*c3*c5 + c4*c4)/85 float c9 = (c2*c7 + c3*c6 + c4*c5)/19 float c10 = (2*c2*c8 + 2*c3*c7 + 2*c4*c6 + c5*c5)/49 s = s*0.25 complex ss = sqr(s) complex si = 1/s complex ssi = sqr(si) complex u = ssi + \ ((((((((c10*ss + \ c9)*ss + c8)*ss + c7)*ss + c6)*ss + \ c5)*ss + c4)*ss + c3)*ss + c2)*ss complex r = -2*si*ssi + \ ((((((((18*c10*ss + \ 16*c9)*ss + 14*c8)*ss + 12*c7)*ss + 10*c6)*ss + \ 8*c5)*ss + 6*c4)*ss + 4*c3)*ss + 2*c2)*s complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 s = 1 - 1/(u + 5/4) complex t = (1 - 3*s + 2*sqr(s) + sqr(1 - s)*r)/(2*sqr(s)) a0 = 2*s*(s*(t - 2) + 1)/(sqr(s)*(t - 1) - s + 1) complex p = (s - 1)/(1 - 0.5*a0) zd = 1 + p*0.5/a0 elseif @geomtree == 20 s = 1/s complex t = s/(1 + s) complex a0 = (2*s*(s - t) - 2*sqr(s)*(s - 1))/(s - t - sqr(s)*(s - 1)) complex p = (t - s)/(1 - 0.5*a0) a1 = s zd = a1 + p*0.5/a0 elseif @geomtree == 19 float w1 = 1.3254912396824867143 complex w3 = (1.486006467050162426, 0.6627456198412433572) float sh = round(0.5*real(s)/real(w3)) s = s - 2*w3*sh sh = round(0.5*imag(s)/w1) s = s - 2*flip(w1)*sh float g2 = 450/216 float g3 = -253/216 float c2 = g2/20 float c3 = g3/28 float c4 = c2*c2/3 float c5 = 3*c2*c3/11 float c6 = (c3*c3 + 2*c2*c4)/13 float c7 = (c2*c5 + c3*c4)/10 float c8 = 3*(2*c2*c6 + 2*c3*c5 + c4*c4)/85 float c9 = (c2*c7 + c3*c6 + c4*c5)/19 float c10 = (2*c2*c8 + 2*c3*c7 + 2*c4*c6 + c5*c5)/49 s = s*0.25 complex ss = sqr(s) complex si = 1/s complex ssi = sqr(si) complex u = ssi + \ ((((((((c10*ss + \ c9)*ss + c8)*ss + c7)*ss + c6)*ss + \ c5)*ss + c4)*ss + c3)*ss + c2)*ss complex r = -2*si*ssi + \ ((((((((18*c10*ss + \ 16*c9)*ss + 14*c8)*ss + 12*c7)*ss + 10*c6)*ss + \ 8*c5)*ss + 6*c4)*ss + 4*c3)*ss + 2*c2)*s complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 ; complex r1 = sqrt(4*u*u*u - 11*u/4 - 3/8) ; if |r - r1| < |r + r1| ; r = r1 ; else ; r = -r1 ; endif s = 2*(111 - 36*(u + r))/((144*u + 120)*u + 277) a0 = -u + 13/12 complex p = (s - 1)/(1 - 0.5*a0) zd = 1 + p*0.5/a0 elseif @geomtree == 18 complex u = s complex a0 = (1 - 4*sqr(u))*0.5 complex p = -4/((4*u + 4)*u + 5) zd = 1 + p*0.5/a0 elseif @geomtree == 17 complex a0 = 1/s + 1 complex p = 1/(a0 - 2) zd = 1 + p*0.5/a0 elseif @geomtree == 16 complex t = 1/s + 1 a0 = 2*t*((t - 1)*t + 1)/(((t - 1)*t + 1)*t + 1) complex p = (((t - 2)*t + 2)*sqr(t) - 1)/((t - 2)*t + 2) zd = 1 + p*0.5/a0 elseif @geomtree == 15 s = flip(1)*s float w1 = 1.3728695590448768360 float w2 = 1.5470797535511201732 float sh = round(0.5*real(s)/w1) s = s - 2*w1*sh sh = round(0.5*imag(s)/w2) s = s - 2*flip(w2)*sh float g2 = 11/4 float g3 = 3/8 float c2 = g2/20 float c3 = g3/28 float c4 = c2*c2/3 float c5 = 3*c2*c3/11 float c6 = (c3*c3 + 2*c2*c4)/13 float c7 = (c2*c5 + c3*c4)/10 float c8 = 3*(2*c2*c6 + 2*c3*c5 + c4*c4)/85 float c9 = (c2*c7 + c3*c6 + c4*c5)/19 float c10 = (2*c2*c8 + 2*c3*c7 + 2*c4*c6 + c5*c5)/49 s = s*0.25 complex ss = sqr(s) complex si = 1/s complex ssi = sqr(si) complex u = ssi + \ ((((((((c10*ss + \ c9)*ss + c8)*ss + c7)*ss + c6)*ss + \ c5)*ss + c4)*ss + c3)*ss + c2)*ss complex r = -2*si*ssi + \ ((((((((18*c10*ss + \ 16*c9)*ss + 14*c8)*ss + 12*c7)*ss + 10*c6)*ss + \ 8*c5)*ss + 6*c4)*ss + 4*c3)*ss + 2*c2)*s complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 complex q = 6*sqr(u) - 0.5*g2 complex r1 = 0.25*q*(12*sqr(r)*u - sqr(q))/(r*sqr(r)) - r u = 0.25*sqr(q/r) - 2*u r = r1 ; complex r1 = sqrt(4*u*u*u - 11*u/4 - 3/8) ; if |r - r1| < |r + r1| ; r = r1 ; else ; r = -r1 ; endif complex t = (flip(8)*r - 9 + 16*sqr(u))/(16*sqr(u) + 8*u -19) s = 1/(u - 5/4) + 1 complex p = (sqr(t) + s - 1)/(1 - t) a0 = 2*(1 + (1 - s)/p) zd = 1 + p*0.5/a0 elseif @geomtree == 14 s = 1/s a1 = 0 a0 = 1 complex p = s zd = p*0.5/a0 elseif @geomtree == 13 s = 1/s + 0.5*(3 - sqrt(5)) complex a0 = (4*sqr(s) - 2*s)/(s - 1 + sqr(s)) complex p = (s - 1)/(1 - 0.5*a0) zd = 1 + p*0.5/a0 elseif @geomtree == 12 complex p = -1/(1 - 0.5*s) complex a0 = s zd = 1 + p*0.5/a0 elseif @geomtree == 11 s = sqrt(s) complex a0 = s complex ss = sqr(s) complex b = (sqr(sqr(ss)) - 1)/(2*s*ss*(ss - 1)) complex p = 0.5*(sqrt(sqr(b) - 4) - b) complex a1 = s*p p = p - ss*p zd = a0 elseif @geomtree == 10 s = 1/s + 1 complex p = 4*s*(s - 1)/(2 - s) complex a0 = s zd = 1 + p*0.5/a0 elseif @geomtree == 9 s = 1/s + 1 complex p = (s - 1)/(1 - 0.5*s) complex a0 = s zd = 1 + p*0.5/a0 elseif @geomtree == 8 complex p = -1 complex a0 = s zd = 1 + p*0.5/a0 elseif @geomtree == 7 s = 1/s + 1 complex p = sqr(s) - 1 complex a0 = 2*s/(s + 1) zd = 1 + p*0.5/a0 elseif @geomtree == 6 s = 1/s + 4 complex p = s complex a0 = 2 zd = 1 + p*0.25 elseif @geomtree == 5 s = 1/s complex p = s complex a0 = 1 zd = 1 + p*0.5 elseif @geomtree == 4 if @insout s = 1/s endif complex a0 = s complex p = -2*s zd = 1 elseif @geomtree == 3 complex p = s complex a0 = sqrt(1 + 4*sqr(p)) zd = 2*p + a0 zd = (zd + 1/zd)*p + a0 elseif @geomtree == 2 s = (1 - s)/(1 + s) complex p = (1 - s)/(s + 1/s + 2) complex a0 = s + 2*p zd = 2*p + a0 elseif @geomtree == 1 complex p = s complex a0 = 1 + 2*s zd = 2*p + a0 else complex p = s complex a0 = 0 zd = 2*p + a0 endif complex pd = @windage*p/sqrt(2) z = @bailout zd = #pixel if (@geomtree == 6) || (@geomtree == 7) || (@geomtree == 8) || \ (@geomtree == 16) || (@geomtree == 17) || (@geomtree == 18) || \ (@geomtree == 20) || (@geomtree == 21) || (@geomtree == 22) || \ (@geomtree == 23) zd = 1/zd + a0 endif if (@geomtree == 12) || (@geomtree == 13) || (@geomtree == 15) || \ (@geomtree == 19) zd = 1/zd endif loop: if @geomtree == 11 complex zi = 1/(sqr(zd) + a1) else complex zi = 1/zd endif if @geomtree <= 3 z = z*pd*(1 - sqr(zi)) zd = (zd + zi)*p + a0 elseif @geomtree == 11 z = -z*pd*2*zd*sqr(zi) zd = a0 + p*zi else z = z*pd*sqr(zi)*(a0*zi - 1) zd = a1 + p*zi*(1 - 0.5*a0*zi) endif bailout: |z| > |zd| default: title = "Juad2crit" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param hypcent caption = "Hyperbolic Translation" default = (1,1) hint = "Move the origin around by a horizontal move followed \ by vertical move. (1, 2.85042103537095), (1, 1), \ (3.36274791875425, 1), (13.53249303123686, 2.85042103537095) \ center 4 of 6 Weierstrass points." endparam param radical caption = "Radical" default = false hint = "From a purist standpoint this is unnecessary. It helps \ coherence on zooms deeper than 1e8." endparam param geomtree caption = "Geometry" default = 0 hint = "This defines the connection geometry of the critical points." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param nd caption = "Destination" default = 0 hint = "This defines the destination critical point." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param lowfix caption = "Fix Lower" default = false hint = "Sends critical value -1 to a fixed point instead of +1." endparam param fold caption = "Fold up" default = false hint = "Fold a symmetry at 0." endparam param coslimit caption = "Cosine limit" default = false hint = "As order approaches infinity we get a cosine \ with chained critical points." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param windage caption = "Kentucky" default = 1.0 hint = "Windage for the convergance criteria." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Quad2crit" power = power bailout = bailout } Chebcheb { ; Generic Mandelbrot set init: complex s = #pixel complex t = 0 complex u = 0 int usign = 1 complex r = 0 int rsign = 1 if @coslimit t = #pi*@ne else complex u = cos(@nd*#pi/@n) if floor(0.5*@nd) == 0.5*@nd int usign = 1 else int usign = -1 endif complex t = cos(@ne*#pi/@n) endif if !@coslimit2 complex r = cos(@nf*#pi/@n2) if floor(0.5*@nf) == 0.5*@nf int rsign = 1 else int rsign = -1 endif endif if @insout s = 1/s + 1 endif if @fold if @coslimit && (floor(0.5*@ne) == 0.5*@ne) && \ (@n2 == 2) && (@nf == 1) && (@geomtree == 0) s = (1/s + 1)*sqr(@ne) elseif @coslimit && (floor(0.5*@ne) != 0.5*@ne) && \ (@n2 == 2) && (@nf == 1) && (@geomtree == 0) s = s*sqr(@ne) elseif @coslimit && (@ne == 1) && \ (@n2 == 2) && (@nf == 1) && (@geomtree == 1) s = 1/s + 1 elseif !@coslimit && (@nd == 1 + @ne) && (@n == 2*@nd) &&\ (@n2 == 2) && (@nf == 1) && (@geomtree == 1) s = 1/s + 1 endif if (@n2 != 2) && (@n2 == 2*@nf) if @ne == 1 s = 1/s + 0.5 endif s = sqrt(s) else s = sqrt(sqrt(s)) endif endif complex ssave = s complex ss = sqr(s) complex sf = 0 if @coslimit2 sf = cos(s) elseif @n2 == 3 sf = (4*ss - 3)*s elseif @n2 == 4 sf = ((8*ss - 8)*ss + 1) elseif @n2 == 5 sf = ((16*ss - 20)*ss + 5)*s elseif @n2 == 6 sf = (((32*ss - 48)*ss + 18)*ss - 1) elseif @n2 == 7 sf = (((64*ss - 112)*ss + 56)*ss - 7)*s elseif @n2 == 8 sf = (2*sqr(2*sqr(2*ss - 1) - 1) - 1) elseif @n2 == 9 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf elseif @n2 == 16 sf = (2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) elseif @n2 == 27 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf sf = (4*sqr(sf) - 3)*sf elseif @n2 == 32 sf = (2*sqr(2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) - 1) else sf = (2*ss - 1) endif if @geomtree == 1 complex p = (u - t)/(2*rsign) complex a0 = t + rsign*p s = a0 + sf*p else complex p = (u - t)/(sf - rsign) complex a0 = t - rsign*p s = a0 - rsign*p endif complex ss = sqr(s) complex sf = 0 if @coslimit sf = cos(s) elseif @n == 3 sf = (4*ss - 3)*s elseif @n == 4 sf = ((8*ss - 8)*ss + 1) elseif @n == 5 sf = ((16*ss - 20)*ss + 5)*s elseif @n == 6 sf = (((32*ss - 48)*ss + 18)*ss - 1) elseif @n == 7 sf = (((64*ss - 112)*ss + 56)*ss - 7)*s elseif @n == 8 sf = (2*sqr(2*sqr(2*ss - 1) - 1) - 1) elseif @n == 9 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf elseif @n == 16 sf = (2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) elseif @n == 27 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf sf = (4*sqr(sf) - 3)*sf elseif @n == 32 sf = (2*sqr(2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) - 1) else sf = (2*ss - 1) endif if @geomtree == 1 complex q = (r - ssave)/(sf + usign) complex a1 = ssave + usign*q else complex q = (r - ssave)/(sf + usign) complex a1 = ssave + usign*q endif z = u ; z = 1 loop: ; s = sf*z + a0 s = z ss = sqr(s) if @coslimit sf = cos(s) elseif @n == 3 sf = (4*ss - 3)*s elseif @n == 4 sf = ((8*ss - 8)*ss + 1) elseif @n == 5 sf = ((16*ss - 20)*ss + 5)*s elseif @n == 6 sf = (((32*ss - 48)*ss + 18)*ss - 1) elseif @n == 7 sf = (((64*ss - 112)*ss + 56)*ss - 7)*s elseif @n == 8 sf = (2*sqr(2*sqr(2*ss - 1) - 1) - 1) elseif @n == 9 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf elseif @n == 16 sf = (2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) elseif @n == 27 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf sf = (4*sqr(sf) - 3)*sf elseif @n == 32 sf = (2*sqr(2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) - 1) else sf = (2*ss - 1) endif s = sf*q + a1 complex ss = sqr(s) if @coslimit2 if abs(imag(s)) > 20 sf = (1e10,2e10) else sf = cos(s) endif elseif @n2 == 3 sf = (4*ss - 3)*s elseif @n2 == 4 sf = ((8*ss - 8)*ss + 1) elseif @n2 == 5 sf = ((16*ss - 20)*ss + 5)*s elseif @n2 == 6 sf = (((32*ss - 48)*ss + 18)*ss - 1) elseif @n2 == 7 sf = (((64*ss - 112)*ss + 56)*ss - 7)*s elseif @n2 == 8 sf = (2*sqr(2*sqr(2*ss - 1) - 1) - 1) elseif @n2 == 9 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf elseif @n2 == 16 sf = (2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) elseif @n2 == 27 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf sf = (4*sqr(sf) - 3)*sf elseif @n2 == 32 sf = (2*sqr(2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) - 1) else sf = (2*ss - 1) endif z = sf*p + a0 ; z = sf bailout: |z| <= @bailout default: title = "Chebcheb" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param geomtree caption = "Geometry" default = 0 hint = "This defines the connection geometry of the critical points." endparam param n caption = "Order" default = 3 hint = "This defines the order of the Chebyshev polynomial." endparam param n2 caption = "Order 2" default = 3 hint = "This defines the order of the 2nd Chebyshev polynomial." endparam param nd caption = "Destination" default = 1 hint = "This defines the destination critical point." endparam param ne caption = "Destination 2" default = 2 hint = "This defines the 2nd destination critical point." endparam param nf caption = "Destination 3" default = 1 hint = "This defines the 3rd destination critical point." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param lowfix caption = "Fix Lower" default = false hint = "Sends critical value -1 to a fixed point instead of +1." endparam param coslimit caption = "Cosine limit" default = false hint = "As order approaches infinity we get a cosine \ with chained critical points." endparam param coslimit2 caption = "Cosine limit 2" default = false hint = "As order approaches infinity we get a cosine \ with chained critical points." endparam param fold caption = "Fold up" default = false hint = "Fold a symmetry at 0." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 1280000.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jhebcheb" seed = #pixel power = power n = n n2 = n2 nd = nd ne = ne nf = nf coslimit = coslimit coslimit2 = coslimit2 geomtree = geomtree lowfix = lowfix insout = insout fold = fold bailout = bailout } Jhebcheb { ; Generic Julia set init: complex s = @seed complex t = 0 complex u = 0 int usign = 1 complex r = 0 int rsign = 1 if @coslimit t = #pi*@ne else complex u = cos(@nd*#pi/@n) if floor(0.5*@nd) == 0.5*@nd int usign = 1 else int usign = -1 endif complex t = cos(@ne*#pi/@n) endif if !@coslimit2 complex r = cos(@nf*#pi/@n2) if floor(0.5*@nf) == 0.5*@nf int rsign = 1 else int rsign = -1 endif endif if @insout s = 1/s + 1 endif if @fold if @coslimit && (floor(0.5*@ne) == 0.5*@ne) && \ (@n2 == 2) && (@nf == 1) && (@geomtree == 0) s = (1/s + 1)*sqr(@ne) elseif @coslimit && (floor(0.5*@ne) != 0.5*@ne) && \ (@n2 == 2) && (@nf == 1) && (@geomtree == 0) s = s*sqr(@ne) elseif @coslimit && (@ne == 1) && \ (@n2 == 2) && (@nf == 1) && (@geomtree == 1) s = 1/s + 1 elseif !@coslimit && (@nd == 1 + @ne) && (@n == 2*@nd) &&\ (@n2 == 2) && (@nf == 1) && (@geomtree == 1) s = 1/s + 1 endif if (@n2 != 2) && (@n2 == 2*@nf) if @ne == 1 s = 1/s + 0.5 endif s = sqrt(s) else s = sqrt(sqrt(s)) endif endif complex ssave = s complex ss = sqr(s) complex sf = 0 if @coslimit2 sf = cos(s) elseif @n2 == 3 sf = (4*ss - 3)*s elseif @n2 == 4 sf = ((8*ss - 8)*ss + 1) elseif @n2 == 5 sf = ((16*ss - 20)*ss + 5)*s elseif @n2 == 6 sf = (((32*ss - 48)*ss + 18)*ss - 1) elseif @n2 == 7 sf = (((64*ss - 112)*ss + 56)*ss - 7)*s elseif @n2 == 8 sf = (2*sqr(2*sqr(2*ss - 1) - 1) - 1) elseif @n2 == 9 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf elseif @n2 == 16 sf = (2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) elseif @n2 == 27 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf sf = (4*sqr(sf) - 3)*sf elseif @n2 == 32 sf = (2*sqr(2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) - 1) else sf = (2*ss - 1) endif if @geomtree == 1 complex p = (u - t)/(2*rsign) complex a0 = t + rsign*p s = a0 + sf*p else complex p = (u - t)/(sf - rsign) complex a0 = t - rsign*p s = a0 - rsign*p endif complex ss = sqr(s) complex sf = 0 if @coslimit sf = cos(s) elseif @n == 3 sf = (4*ss - 3)*s elseif @n == 4 sf = ((8*ss - 8)*ss + 1) elseif @n == 5 sf = ((16*ss - 20)*ss + 5)*s elseif @n == 6 sf = (((32*ss - 48)*ss + 18)*ss - 1) elseif @n == 7 sf = (((64*ss - 112)*ss + 56)*ss - 7)*s elseif @n == 8 sf = (2*sqr(2*sqr(2*ss - 1) - 1) - 1) elseif @n == 9 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf elseif @n == 16 sf = (2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) elseif @n == 27 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf sf = (4*sqr(sf) - 3)*sf elseif @n == 32 sf = (2*sqr(2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) - 1) else sf = (2*ss - 1) endif if @geomtree == 1 complex q = (r - ssave)/(sf + usign) complex a1 = ssave + usign*q else complex q = (r - ssave)/(sf + usign) complex a1 = ssave + usign*q endif if @coslimit z = #pi*#pixel else z = #pi*#pixel endif loop: s = z ss = sqr(s) if @coslimit sf = cos(s) elseif @n == 3 sf = (4*ss - 3)*s elseif @n == 4 sf = ((8*ss - 8)*ss + 1) elseif @n == 5 sf = ((16*ss - 20)*ss + 5)*s elseif @n == 6 sf = (((32*ss - 48)*ss + 18)*ss - 1) elseif @n == 7 sf = (((64*ss - 112)*ss + 56)*ss - 7)*s elseif @n == 8 sf = (2*sqr(2*sqr(2*ss - 1) - 1) - 1) elseif @n == 9 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf elseif @n == 16 sf = (2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) elseif @n == 27 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf sf = (4*sqr(sf) - 3)*sf elseif @n == 32 sf = (2*sqr(2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) - 1) else sf = (2*ss - 1) endif s = sf*q + a1 complex ss = sqr(s) if @coslimit2 if abs(imag(s)) > 20 sf = (1e10,2e10) else sf = cos(s) endif elseif @n2 == 3 sf = (4*ss - 3)*s elseif @n2 == 4 sf = ((8*ss - 8)*ss + 1) elseif @n2 == 5 sf = ((16*ss - 20)*ss + 5)*s elseif @n2 == 6 sf = (((32*ss - 48)*ss + 18)*ss - 1) elseif @n2 == 7 sf = (((64*ss - 112)*ss + 56)*ss - 7)*s elseif @n2 == 8 sf = (2*sqr(2*sqr(2*ss - 1) - 1) - 1) elseif @n2 == 9 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf elseif @n2 == 16 sf = (2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) elseif @n2 == 27 sf = (4*ss - 3)*s sf = (4*sqr(sf) - 3)*sf sf = (4*sqr(sf) - 3)*sf elseif @n2 == 32 sf = (2*sqr(2*sqr(2*sqr(2*sqr(2*ss - 1) - 1) - 1) - 1) - 1) else sf = (2*ss - 1) endif z = sf*p + a0 bailout: |z| <= @bailout default: title = "Jhebcheb" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param geomtree caption = "Geometry" default = 0 hint = "This defines the connection geometry of the critical points." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param n2 caption = "Order 2" default = 3 hint = "This defines the order of the 2nd Chebyshev polynomial." endparam param nd caption = "Destination" default = 1 hint = "This defines the destination critical point." endparam param ne caption = "Destination 2" default = 2 hint = "This defines the 2nd destination critical point." endparam param nf caption = "Destination 3" default = 1 hint = "This defines the 3rd destination critical point." endparam param coslimit2 caption = "Cosine limit 2" default = false hint = "As order approaches infinity we get a cosine \ with chained critical points." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param lowfix caption = "Fix Lower" default = false hint = "Sends critical value -1 to a fixed point instead of +1." endparam param fold caption = "Fold up" default = false hint = "Fold a symmetry at 0." endparam param coslimit caption = "Cosine limit" default = false hint = "As order approaches infinity we get a cosine \ with chained critical points." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Chebcheb" power = power bailout = bailout } Meet10_n_1 { ; Generic Mandelbrot set init: complex s = #pixel if @insout s = 1/s + 1 endif complex an5 = 1/(@n + 5) complex an4 = 1/(@n + 4) complex an3 = 1/(@n + 3) complex an2 = 1/(@n + 2) complex an1 = 1/(@n + 1) if @nnz == 2 if @nn1 == 2 complex t = (an2*s - an3*(1 + 2*s) + \ an4*(2 + s) - an5)/\ (an1*s - an2*(1 + 2*s) + \ an3*(2 + s) - an4) an4 = -an4*(2 + s + t) an3 = an3*(1 + 2*s + 2*t + s*t) an2 = -an2*(s + t + 2*s*t) an1 = an1*s*t elseif @nn1 == 1 complex ss = sqr(s) complex t = (an2*ss - an3*(ss + 2*s) + \ an4*(1 + 2*s) - an5)/\ (an1*ss - an2*(ss + 2*s) + \ an3*(1 + 2*s) - an4) an4 = -an4*(1 + 2*s + t) an3 = an3*(2*s + t + 2*s*t + ss) an2 = -an2*(2*s*t + ss + ss*t) an1 = an1*ss*t else complex ss = sqr(s) complex t = (an2*ss*s - 3*an3*ss + 3*an4*s - an5)/\ (an1*ss*s - 3*an2*ss + 3*an3*s - an4) an4 = -an4*(3*s + t) an3 = an3*(3*s*t + 3*ss) an2 = -an2*(3*ss*t + ss*s) an1 = an1*ss*s*t endif if @swapst complex ss = s s = t t = ss endif complex tf = ((((an5*t + an4)*t + an3)*t + an2)*t + an1)*\ t^(@n + 1) if @swap01 complex p = ((-s)/tf)^(1/(@n + 4)) else complex p = ((1 - s)/tf)^(1/(@n + 4)) endif complex pn2 = sqr(p) an4 = an4*p an3 = an3*pn2 an2 = an2*pn2*p an1 = an1*pn2*pn2 elseif @nnz == 1 if @nn1 == 1 complex t = (an2*s - an3*(1 + s) + an4)/\ (an1*s - an2*(1 + s) + an3) an3 = -an3*(1 + s + t) an2 = an2*(s*t + s + t) an1 = -an1*s*t else complex ss = sqr(s) complex t = (an2*ss - 2*an3*s + an4)/(an1*ss - 2*an2*s + an3) an3 = -an3*(2*s + t) an2 = an2*(2*s*t + ss) an1 = -an1*ss*t endif if @swapst complex ss = s s = t t = ss endif complex tt = sqr(t) complex tf = (an4*tt*t + an3*tt + an2*t + an1)*t^(@n + 1) if @swap01 complex p = ((-s)/tf)^(1/(@n + 3)) else complex p = ((1 - s)/tf)^(1/(@n + 3)) endif complex pn2 = sqr(p) an3 = an3*p an2 = an2*pn2 an1 = an1*pn2*p else complex t = (an2*s - an3)/(an1*s - an2) if @swapst ss = s s = t t = ss endif complex tf = (an3*sqr(t) - an2*(s + t)*t + an1*s*t)*t^(@n + 1) if @swap01 complex p = ((-s)/tf)^an2 else complex p = ((1 - s)/tf)^an2 endif an2 = -an2*p*(s + t) an1 = an1*s*t*sqr(p) endif complex a0 = s*p z = a0 loop: if @nnz == 2 z = ((((an5*z + an4)*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 elseif @nnz == 1 z = (((an4*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 else z = ((an3*z + an2)*z + an1)*z^(@n + 1) + a0 endif bailout: |z| <= @bailout default: title = "Meet10_n_1" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param n caption = "Order" default = 1 hint = "This defines the order of the zero critical point." endparam param nnz caption = "Order 2" default = 0 hint = "This defines the excess orders of the nonzero \ critical points." endparam param nn1 caption = "Order 3" default = 0 hint = "This defines the order of the one critical point." endparam param swapst caption = "Swap s t" default = false hint = "Swaps the s and t critical points" endparam param swap01 caption = "Swap 0 1" default = false hint = "Swaps the 0 and 1 critical points" endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jeet10_n_1" seed = #pixel power = power n = n nnz = nnz nn1 = nn1 swapst = swapst swap01 = swap01 insout = insout bailout = bailout } Jeet10_n_1 { ; Generic Julia set init: complex s = @seed if @insout s = 1/s + 1 endif complex an5 = 1/(@n + 5) complex an4 = 1/(@n + 4) complex an3 = 1/(@n + 3) complex an2 = 1/(@n + 2) complex an1 = 1/(@n + 1) if @nnz == 2 if @nn1 == 2 complex t = (an2*s - an3*(1 + 2*s) + \ an4*(2 + s) - an5)/\ (an1*s - an2*(1 + 2*s) + \ an3*(2 + s) - an4) an4 = -an4*(2 + s + t) an3 = an3*(1 + 2*s + 2*t + s*t) an2 = -an2*(s + t + 2*s*t) an1 = an1*s*t elseif @nn1 == 1 complex ss = sqr(s) complex t = (an2*ss - an3*(ss + 2*s) + \ an4*(1 + 2*s) - an5)/\ (an1*ss - an2*(ss + 2*s) + \ an3*(1 + 2*s) - an4) an4 = -an4*(1 + 2*s + t) an3 = an3*(2*s + t + 2*s*t + ss) an2 = -an2*(2*s*t + ss + ss*t) an1 = an1*ss*t else complex ss = sqr(s) complex t = (an2*ss*s - 3*an3*ss + 3*an4*s - an5)/\ (an1*ss*s - 3*an2*ss + 3*an3*s - an4) an4 = -an4*(3*s + t) an3 = an3*(3*s*t + 3*ss) an2 = -an2*(3*ss*t + ss*s) an1 = an1*ss*s*t endif if @swapst complex ss = s s = t t = ss endif complex tf = ((((an5*t + an4)*t + an3)*t + an2)*t + an1)*\ t^(@n + 1) if @swap01 complex p = ((-s)/tf)^(1/(@n + 4)) else complex p = ((1 - s)/tf)^(1/(@n + 4)) endif complex pn2 = sqr(p) an4 = an4*p an3 = an3*pn2 an2 = an2*pn2*p an1 = an1*pn2*pn2 elseif @nnz == 1 if @nn1 == 1 complex t = (an2*s - an3*(1 + s) + an4)/\ (an1*s - an2*(1 + s) + an3) an3 = -an3*(1 + s + t) an2 = an2*(s*t + s + t) an1 = -an1*s*t else complex ss = sqr(s) complex t = (an2*ss - 2*an3*s + an4)/(an1*ss - 2*an2*s + an3) an3 = -an3*(2*s + t) an2 = an2*(2*s*t + ss) an1 = -an1*ss*t endif if @swapst complex ss = s s = t t = ss endif complex tt = sqr(t) complex tf = (an4*tt*t + an3*tt + an2*t + an1)*t^(@n + 1) if @swap01 complex p = ((-s)/tf)^(1/(@n + 3)) else complex p = ((1 - s)/tf)^(1/(@n + 3)) endif complex pn2 = sqr(p) an3 = an3*p an2 = an2*pn2 an1 = an1*pn2*p else complex t = (an2*s - an3)/(an1*s - an2) if @swapst ss = s s = t t = ss endif complex tf = (an3*sqr(t) - an2*(s + t)*t + an1*s*t)*t^(@n + 1) if @swap01 complex p = ((-s)/tf)^an2 else complex p = ((1 - s)/tf)^an2 endif an2 = -an2*p*(s + t) an1 = an1*s*t*sqr(p) endif complex a0 = s*p z = 2*#pixel loop: if @nnz == 2 z = ((((an5*z + an4)*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 elseif @nnz == 1 z = (((an4*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 else z = ((an3*z + an2)*z + an1)*z^(@n + 1) + a0 endif bailout: |z| <= @bailout default: title = "Jeet10_n_1" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param nnz caption = "Order 2" default = 0 hint = "This defines the excess orders of the nonzero \ critical points." endparam param nn1 caption = "Order 3" default = 0 hint = "This defines the order of the one critical point." endparam param swapst caption = "Swap s t" default = false hint = "Swaps the s and t critical points" endparam param swap01 caption = "Swap 0 1" default = false hint = "Swaps the 0 and 1 critical points" endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Meet10_n_1" power = power bailout = bailout } Meet1_1_n_11 { ; Generic Mandelbrot set init: complex s = #pixel if @insout s = 1/s endif complex brfact = @branchcut if @foldup == 1 s = sqrt(s) complex ca2 = -1.5 + s complex ca1 = -1.5 - s complex ca0 = 1 complex cq = (3*ca1 - ca2*ca2)/9 complex cr = (9*ca2*ca1 - 27*ca0 - 2*ca2*ca2*ca2)/54 if real(cr) < 0 complex w = (cr - sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) else complex w = (cr + sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) endif complex wi = cq/w complex s = w - wi - ca2/3 s = (s - 0.5)*0.5 brfact = brfact*(s + 3/(16*s)) s = s + 0.5 - 3/(16*s) ; s = 1 - 1/s ; s = 1 - 1/s brfact = brfact*(s - 1)^3 elseif @foldup == 2 s = sqrt(1/s + 9/16) brfact = brfact*(s + 3/(16*s)) s = s + 0.5 - 3/(16*s) brfact = brfact*(s - 1)^3 elseif @foldup == 5 s = sqrt(1/(1/(1/s + 3/4) - 8/3) + 9/16) brfact = brfact*(s + 3/(16*s)) s = s + 0.5 - 3/(16*s) brfact = brfact*(s - 1)^3 elseif @foldup == 3 s = 1/(sqrt(1/(s + 3/8) - 4/3) - 2/sqrt(3)) + 0.25*sqrt(3) brfact = brfact*(s + 3/(16*s)) s = s + 0.5 - 3/(16*s) brfact = brfact*(s - 1)^3 elseif @foldup == 4 s = 1/(sqrt(1/(s + 1) - 0.5) - sqrt(0.5)) + sqrt(0.5) brfact = brfact*(s + 1/(2*s)) s = s + 0.5 - 1/(2*s) brfact = brfact*(s - 1)^2 elseif @foldup == 6 s = 1/(sqrt(1/s - 2.25) - 1.5) + 1/3 brfact = brfact*(s + 1/(9*s)) s = s + 0.5 - 1/(9*s) brfact = brfact*(s - 1)^4 elseif @foldup == 7 s = sqrt(1/s - 1/9) brfact = brfact*(s + 1/(9*s)) s = s + 0.5 - 1/(9*s) brfact = brfact*(s - 1)^4 elseif @foldup == 8 s = sqrt(1/s + 1/36) brfact = brfact*(s + 1/(9*s)) s = s + 0.5 - 1/(9*s) brfact = brfact*(s - 1)^4 else ; brfact = brfact*(s + 3/(16*s)) ; s = s + 0.5 - 3/(16*s) ; brfact = brfact*(s - 1)^3 endif complex an6 = 1/(@n + 6) complex an5 = 1/(@n + 5) complex an4 = 1/(@n + 4) complex an3 = 1/(@n + 3) complex an2 = 1/(@n + 2) complex an1 = 1/(@n + 1) if @nnz == 3 if @nn1 == 3 complex ut3 = s*sqr(s) complex ut2 = 3*sqr(s) complex ut1 = 3*s complex ut0 = 1 elseif @nn1 == 2 complex ut3 = sqr(s) complex ut2 = 2*s + sqr(s) complex ut1 = 1 + 2*s complex ut0 = 1 elseif @nn1 == 1 complex ut3 = s complex ut2 = 1 + 2*s complex ut1 = 2 + s complex ut0 = 1 else complex ut3 = 1 complex ut2 = 3 complex ut1 = 3 complex ut0 = 1 endif complex a1 = an4*ut3 - an3*ut2 + an2*ut1 - an1*ut0 complex b1 = (an5*ut3 - an4*ut2 + an3*ut1 - an2*ut0)*s complex c1 = (an6*ut3 - an5*ut2 + an4*ut1 - an3*ut0)*sqr(s) if @nn1 == 3 complex ut3 = 1 complex ut2 = 3 complex ut1 = 3 complex ut0 = 1 elseif @nn1 == 2 complex ut3 = 1 complex ut2 = 2 + s complex ut1 = 1 + 2*s complex ut0 = s elseif @nn1 == 1 complex ut3 = 1 complex ut2 = 1 + 2*s complex ut1 = 2*s + sqr(s) complex ut0 = sqr(s) else complex ut3 = 1 complex ut2 = 3*s complex ut1 = 3*sqr(s) complex ut0 = s*sqr(s) endif complex a0 = an4*ut3 - an3*ut2 + an2*ut1 - an1*ut0 complex b0 = an5*ut3 - an4*ut2 + an3*ut1 - an2*ut0 complex c0 = an6*ut3 - an5*ut2 + an4*ut1 - an3*ut0 elseif @nnz == 2 if @nn1 == 2 complex ut2 = sqr(s) complex ut1 = 2*s complex ut0 = 1 elseif @nn1 == 1 complex ut2 = s complex ut1 = 1 + s complex ut0 = 1 else complex ut2 = 1 complex ut1 = 2 complex ut0 = 1 endif complex a1 = an3*ut2 - an2*ut1 + an1*ut0 complex b1 = (an4*ut2 - an3*ut1 + an2*ut0)*s complex c1 = (an5*ut2 - an4*ut1 + an3*ut0)*sqr(s) if @nn1 == 2 complex ut2 = 1 complex ut1 = 2 complex ut0 = 1 elseif @nn1 == 1 complex ut2 = 1 complex ut1 = 1 + s complex ut0 = s else complex ut2 = 1 complex ut1 = 2*s complex ut0 = sqr(s) endif complex a0 = an3*ut2 - an2*ut1 + an1*ut0 complex b0 = an4*ut2 - an3*ut1 + an2*ut0 complex c0 = an5*ut2 - an4*ut1 + an3*ut0 elseif @nnz == 1 if @nn1 == 1 complex ut1 = s complex ut0 = 1 else complex ut1 = 1 complex ut0 = 1 endif complex a1 = an2*ut1 - an1*ut0 complex b1 = (an3*ut1 - an2*ut0)*s complex c1 = (an4*ut1 - an3*ut0)*sqr(s) if @nn1 == 1 complex ut1 = 1 complex ut0 = 1 else complex ut1 = 1 complex ut0 = s endif complex a0 = an2*ut1 - an1*ut0 complex b0 = an3*ut1 - an2*ut0 complex c0 = an4*ut1 - an3*ut0 else complex ut0 = 1 complex a1 = an2*ut1 - an1*ut0 complex b1 = (an3*ut1 - an2*ut0)*s complex c1 = (an4*ut1 - an3*ut0)*sqr(s) complex ut0 = 1 complex a0 = an2*ut1 - an1*ut0 complex b0 = an3*ut1 - an2*ut0 complex c0 = an4*ut1 - an3*ut0 endif complex qa = a0*b1 - a1*b0 complex qb = a0*c1 - a1*c0 complex qc = b0*c1 - b1*c0 complex qrad = sqrt((sqr(qb) - 4*qa*qc)/sqr(brfact)) complex iqa = 1/(2*qa) complex t = (qb + qrad*brfact)*iqa complex u = (qb - qrad*brfact)*iqa complex ut = u*t complex upt = u + t if @nnz == 3 an5 = -an5*(upt + ut2) an4 = an4*(ut + upt*ut2 + ut1) an3 = -an3*(ut*ut2 + upt*ut1 + ut0) an2 = an2*(ut*ut1 + upt*ut0) an1 = -an1*ut*ut0 elseif @nnz == 2 an4 = -an4*(upt + ut1) an3 = an3*(ut + upt*ut1 + ut0) an2 = -an2*(ut*ut1 + upt*ut0) an1 = an1*ut*ut0 elseif @nnz == 1 an3 = -an3*(upt + ut0) an2 = an2*(ut + upt*ut0) an1 = -an1*ut*ut0 else an2 = -an2*upt an1 = an1*ut endif if @nnz == 3 complex tf = (((((an6*t + an5)*t + an4)*t + an3)*t + an2)\ *t + an1)*t^(@n + 1) complex uf = (((((an6*u + an5)*u + an4)*u + an3)*u + an2)\ *u + an1)*u^(@n + 1) elseif @nnz == 2 complex tf = ((((an5*t + an4)*t + an3)*t + an2)\ *t + an1)*t^(@n + 1) complex uf = ((((an5*u + an4)*u + an3)*u + an2)\ *u + an1)*u^(@n + 1) elseif @nnz == 1 complex tf = (((an4*t + an3)*t + an2)\ *t + an1)*t^(@n + 1) complex uf = (((an4*u + an3)*u + an2)\ *u + an1)*u^(@n + 1) else complex tf = ((an3*t + an2)\ *t + an1)*t^(@n + 1) complex uf = ((an3*u + an2)\ *u + an1)*u^(@n + 1) endif if @geomtree == 3 complex pn1z = (u - s)/(tf - uf) complex a0 = s - uf*pn1z elseif @geomtree == 2 complex pn1z = 1/(tf - uf) complex a0 = -uf*pn1z elseif @geomtree == 1 complex pn1z = (s - t)/uf complex a0 = t else complex pn1z = (u - t)/tf complex a0 = t endif if @nnz == 3 complex p = pn1z^(1/(@n + 5)) complex pn2 = sqr(p) an5 = an5*p an4 = an4*pn2 an3 = an3*pn2*p an2 = an2*pn2*pn2 an1 = an1*pn2*pn2*p elseif @nnz == 2 complex p = pn1z^(1/(@n + 4)) complex pn2 = sqr(p) an4 = an4*p an3 = an3*pn2 an2 = an2*pn2*p an1 = an1*pn2*pn2 elseif @nnz == 1 complex p = pn1z^(1/(@n + 3)) complex pn2 = sqr(p) an3 = an3*p an2 = an2*pn2 an1 = an1*pn2*p else complex p = pn1z^(1/(@n + 2)) complex pn2 = sqr(p) an2 = an2*p an1 = an1*pn2 endif a0 = a0*p z = a0 if @showbranch && (10*real(qrad) < abs(imag(qrad))) z = 1e15 endif loop: if @nnz == 3 z = (((((an6*z + an5)*z + an4)*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 elseif @nnz == 2 z = ((((an5*z + an4)*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 elseif @nnz == 1 z = (((an4*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 else z = ((an3*z + an2)*z + an1)*z^(@n + 1) + a0 endif bailout: |z| <= @bailout default: title = "Meet1_1_n_11" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param geomtree caption = "Geometry" default = 2 hint = "This sets various critical point interconnections." endparam param n caption = "Order" default = 1 hint = "This defines the order of the zero critical point." endparam param nnz caption = "Order 2" default = 2 hint = "This defines the excess orders of the nonzero \ critical points." endparam param nn1 caption = "Order 3" default = 1 hint = "This defines the order of the one critical point." endparam param foldup caption = "Fold Up" default = 3 hint = "This folds up symmetries in various ways." endparam param swapst caption = "Swap s t" default = false hint = "Swaps the s and t critical points" endparam param swap01 caption = "Swap 0 1" default = false hint = "Swaps the 0 and 1 critical points" endparam param branchcut caption = "Branch Cut" default = (1,1) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param showbranch caption = "Show branches" default = false hint = "There are six branch points to this parametization. This \ unwraps two and duplicates the rest." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jeet1_1_n_11" seed = #pixel power = power foldup = foldup geomtree = geomtree branchcut = branchcut n = n nnz = nnz nn1 = nn1 swapst = swapst swap01 = swap01 insout = insout bailout = bailout } Jeet1_1_n_11 { ; Generic Julia set init: complex s = @seed if @insout s = 1/s endif complex brfact = @branchcut if @foldup == 1 s = sqrt(s) complex ca2 = -1.5 + s complex ca1 = -1.5 - s complex ca0 = 1 complex cq = (3*ca1 - ca2*ca2)/9 complex cr = (9*ca2*ca1 - 27*ca0 - 2*ca2*ca2*ca2)/54 if real(cr) < 0 complex w = (cr - sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) else complex w = (cr + sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) endif complex wi = cq/w complex s = w - wi - ca2/3 s = (s - 0.5)*0.5 brfact = brfact*(s + 3/(16*s)) s = s + 0.5 - 3/(16*s) ; s = 1 - 1/s ; s = 1 - 1/s brfact = brfact*(s - 1)^3 elseif @foldup == 2 s = sqrt(1/s + 9/16) brfact = brfact*(s + 3/(16*s)) s = s + 0.5 - 3/(16*s) brfact = brfact*(s - 1)^3 elseif @foldup == 5 s = sqrt(1/(1/(1/s + 3/4) - 8/3) + 9/16) brfact = brfact*(s + 3/(16*s)) s = s + 0.5 - 3/(16*s) brfact = brfact*(s - 1)^3 elseif @foldup == 3 s = 1/(sqrt(1/(s + 3/8) - 4/3) - 2/sqrt(3)) + 0.25*sqrt(3) brfact = brfact*(s + 3/(16*s)) s = s + 0.5 - 3/(16*s) brfact = brfact*(s - 1)^3 elseif @foldup == 4 s = 1/(sqrt(1/(s + 1) - 0.5) - sqrt(0.5)) + sqrt(0.5) brfact = brfact*(s + 1/(2*s)) s = s + 0.5 - 1/(2*s) brfact = brfact*(s - 1)^2 elseif @foldup == 6 s = 1/(sqrt(1/s - 2.25) - 1.5) + 1/3 brfact = brfact*(s + 1/(9*s)) s = s + 0.5 - 1/(9*s) brfact = brfact*(s - 1)^4 elseif @foldup == 7 s = sqrt(1/s - 1/9) brfact = brfact*(s + 1/(9*s)) s = s + 0.5 - 1/(9*s) brfact = brfact*(s - 1)^4 elseif @foldup == 8 s = sqrt(1/s + 1/36) brfact = brfact*(s + 1/(9*s)) s = s + 0.5 - 1/(9*s) brfact = brfact*(s - 1)^4 else ; brfact = brfact*(s + 3/(16*s)) ; s = s + 0.5 - 3/(16*s) ; brfact = brfact*(s - 1)^3 endif complex an6 = 1/(@n + 6) complex an5 = 1/(@n + 5) complex an4 = 1/(@n + 4) complex an3 = 1/(@n + 3) complex an2 = 1/(@n + 2) complex an1 = 1/(@n + 1) if @nnz == 3 if @nn1 == 3 complex ut3 = s*sqr(s) complex ut2 = 3*sqr(s) complex ut1 = 3*s complex ut0 = 1 elseif @nn1 == 2 complex ut3 = sqr(s) complex ut2 = 2*s + sqr(s) complex ut1 = 1 + 2*s complex ut0 = 1 elseif @nn1 == 1 complex ut3 = s complex ut2 = 1 + 2*s complex ut1 = 2 + s complex ut0 = 1 else complex ut3 = 1 complex ut2 = 3 complex ut1 = 3 complex ut0 = 1 endif complex a1 = an4*ut3 - an3*ut2 + an2*ut1 - an1*ut0 complex b1 = (an5*ut3 - an4*ut2 + an3*ut1 - an2*ut0)*s complex c1 = (an6*ut3 - an5*ut2 + an4*ut1 - an3*ut0)*sqr(s) if @nn1 == 3 complex ut3 = 1 complex ut2 = 3 complex ut1 = 3 complex ut0 = 1 elseif @nn1 == 2 complex ut3 = 1 complex ut2 = 2 + s complex ut1 = 1 + 2*s complex ut0 = s elseif @nn1 == 1 complex ut3 = 1 complex ut2 = 1 + 2*s complex ut1 = 2*s + sqr(s) complex ut0 = sqr(s) else complex ut3 = 1 complex ut2 = 3*s complex ut1 = 3*sqr(s) complex ut0 = s*sqr(s) endif complex a0 = an4*ut3 - an3*ut2 + an2*ut1 - an1*ut0 complex b0 = an5*ut3 - an4*ut2 + an3*ut1 - an2*ut0 complex c0 = an6*ut3 - an5*ut2 + an4*ut1 - an3*ut0 elseif @nnz == 2 if @nn1 == 2 complex ut2 = sqr(s) complex ut1 = 2*s complex ut0 = 1 elseif @nn1 == 1 complex ut2 = s complex ut1 = 1 + s complex ut0 = 1 else complex ut2 = 1 complex ut1 = 2 complex ut0 = 1 endif complex a1 = an3*ut2 - an2*ut1 + an1*ut0 complex b1 = (an4*ut2 - an3*ut1 + an2*ut0)*s complex c1 = (an5*ut2 - an4*ut1 + an3*ut0)*sqr(s) if @nn1 == 2 complex ut2 = 1 complex ut1 = 2 complex ut0 = 1 elseif @nn1 == 1 complex ut2 = 1 complex ut1 = 1 + s complex ut0 = s else complex ut2 = 1 complex ut1 = 2*s complex ut0 = sqr(s) endif complex a0 = an3*ut2 - an2*ut1 + an1*ut0 complex b0 = an4*ut2 - an3*ut1 + an2*ut0 complex c0 = an5*ut2 - an4*ut1 + an3*ut0 elseif @nnz == 1 if @nn1 == 1 complex ut1 = s complex ut0 = 1 else complex ut1 = 1 complex ut0 = 1 endif complex a1 = an2*ut1 - an1*ut0 complex b1 = (an3*ut1 - an2*ut0)*s complex c1 = (an4*ut1 - an3*ut0)*sqr(s) if @nn1 == 1 complex ut1 = 1 complex ut0 = 1 else complex ut1 = 1 complex ut0 = s endif complex a0 = an2*ut1 - an1*ut0 complex b0 = an3*ut1 - an2*ut0 complex c0 = an4*ut1 - an3*ut0 else complex ut0 = 1 complex a1 = an2*ut1 - an1*ut0 complex b1 = (an3*ut1 - an2*ut0)*s complex c1 = (an4*ut1 - an3*ut0)*sqr(s) complex ut0 = 1 complex a0 = an2*ut1 - an1*ut0 complex b0 = an3*ut1 - an2*ut0 complex c0 = an4*ut1 - an3*ut0 endif complex qa = a0*b1 - a1*b0 complex qb = a0*c1 - a1*c0 complex qc = b0*c1 - b1*c0 complex qrad = sqrt((sqr(qb) - 4*qa*qc)/sqr(brfact)) complex iqa = 1/(2*qa) complex t = (qb + qrad*brfact)*iqa complex u = (qb - qrad*brfact)*iqa complex ut = u*t complex upt = u + t if @nnz == 3 an5 = -an5*(upt + ut2) an4 = an4*(ut + upt*ut2 + ut1) an3 = -an3*(ut*ut2 + upt*ut1 + ut0) an2 = an2*(ut*ut1 + upt*ut0) an1 = -an1*ut*ut0 elseif @nnz == 2 an4 = -an4*(upt + ut1) an3 = an3*(ut + upt*ut1 + ut0) an2 = -an2*(ut*ut1 + upt*ut0) an1 = an1*ut*ut0 elseif @nnz == 1 an3 = -an3*(upt + ut0) an2 = an2*(ut + upt*ut0) an1 = -an1*ut*ut0 else an2 = -an2*upt an1 = an1*ut endif if @nnz == 3 complex tf = (((((an6*t + an5)*t + an4)*t + an3)*t + an2)\ *t + an1)*t^(@n + 1) complex uf = (((((an6*u + an5)*u + an4)*u + an3)*u + an2)\ *u + an1)*u^(@n + 1) elseif @nnz == 2 complex tf = ((((an5*t + an4)*t + an3)*t + an2)\ *t + an1)*t^(@n + 1) complex uf = ((((an5*u + an4)*u + an3)*u + an2)\ *u + an1)*u^(@n + 1) elseif @nnz == 1 complex tf = (((an4*t + an3)*t + an2)\ *t + an1)*t^(@n + 1) complex uf = (((an4*u + an3)*u + an2)\ *u + an1)*u^(@n + 1) else complex tf = ((an3*t + an2)\ *t + an1)*t^(@n + 1) complex uf = ((an3*u + an2)\ *u + an1)*u^(@n + 1) endif if @geomtree == 3 complex pn1z = (u - s)/(tf - uf) complex a0 = s - uf*pn1z elseif @geomtree == 2 complex pn1z = 1/(tf - uf) complex a0 = -uf*pn1z elseif @geomtree == 1 complex pn1z = (s - t)/uf complex a0 = t else complex pn1z = (u - t)/tf complex a0 = t endif if @nnz == 3 complex p = pn1z^(1/(@n + 5)) complex pn2 = sqr(p) an5 = an5*p an4 = an4*pn2 an3 = an3*pn2*p an2 = an2*pn2*pn2 an1 = an1*pn2*pn2*p elseif @nnz == 2 complex p = pn1z^(1/(@n + 4)) complex pn2 = sqr(p) an4 = an4*p an3 = an3*pn2 an2 = an2*pn2*p an1 = an1*pn2*pn2 elseif @nnz == 1 complex p = pn1z^(1/(@n + 3)) complex pn2 = sqr(p) an3 = an3*p an2 = an2*pn2 an1 = an1*pn2*p else complex p = pn1z^(1/(@n + 2)) complex pn2 = sqr(p) an2 = an2*p an1 = an1*pn2 endif a0 = a0*p z = 2*#pixel loop: if @nnz == 3 z = (((((an6*z + an5)*z + an4)*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 elseif @nnz == 2 z = ((((an5*z + an4)*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 elseif @nnz == 1 z = (((an4*z + an3)*z + an2)*z + an1)*z^(@n + 1) + a0 else z = ((an3*z + an2)*z + an1)*z^(@n + 1) + a0 endif bailout: |z| <= @bailout default: title = "Jeet1_1_n_11" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param geomtree caption = "Geometry" default = 1 hint = "This sets various critical point interconnections." endparam param n caption = "Order" default = 1 hint = "This defines the order of the zero critical point." endparam param nnz caption = "Order 2" default = 2 hint = "This defines the excess orders of the nonzero \ critical points." endparam param nn1 caption = "Order 3" default = 1 hint = "This defines the order of the one critical point." endparam param foldup caption = "Fold Up" default = 2 hint = "This folds up symmetries in various ways." endparam param swapst caption = "Swap s t" default = false hint = "Swaps the s and t critical points" endparam param swap01 caption = "Swap 0 1" default = false hint = "Swaps the 0 and 1 critical points" endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Meet1_1_n_11" power = power bailout = bailout } Meet11_11_0 { ; Generic Mandelbrot set init: complex st = #pixel if @insout st = 1/st endif complex sqst = sqrt(sqr(st) - 0.2) complex s = sqst + st complex t = sqst - st complex a5 = 0.2 complex a4 = -0.25*(s + t) complex a3 = -0.4 complex a2 = 0.5*(s + t) complex a1 = 0.2 complex q = ((((a5*s + a4)*s + a3)*s + a2)*s + a1)*s complex r = ((((a5*t + a4)*t + a3)*t + a2)*t + a1)*t complex pn4 = 2/(q - r) complex u = 1 - q*pn4 complex pn2 = sqrt(pn4) complex p = sqrt(pn2) a4 = a4*p a3 = a3*pn2 a2 = a2*pn2*p a1 = a1*pn4 complex a0 = u*p z = p loop: z = ((((a5*z + a4)*z + a3)*z + a2)*z + a1)*z + a0 bailout: |z| <= @bailout default: title = "Meet11_11_0" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jeet11_11_0" seed = #pixel power = power n = n insout = insout bailout = bailout } Jeet11_11_0 { ; Generic Julia set init: complex st = @seed if @insout st = 1/st endif complex sqst = sqrt(sqr(st) - 0.2) complex s = sqst + st complex t = sqst - st complex a5 = 0.2 complex a4 = -0.25*(s + t) complex a3 = -0.4 complex a2 = 0.5*(s + t) complex a1 = 0.2 complex q = ((((a5*s + a4)*s + a3)*s + a2)*s + a1)*s complex r = ((((a5*t + a4)*t + a3)*t + a2)*t + a1)*t complex pn4 = 2/(q - r) complex u = 1 - q*pn4 complex pn2 = sqrt(pn4) complex p = sqrt(pn2) a4 = a4*p a3 = a3*pn2 a2 = a2*pn2*p a1 = a1*pn4 complex a0 = u*p z = 2*#pixel loop: z = ((((a5*z + a4)*z + a3)*z + a2)*z + a1)*z + a0 bailout: |z| <= @bailout default: title = "Jeet11_11_0" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Meet11_11_0" power = power bailout = bailout } Meet12_12_0 { ; Generic Mandelbrot set init: complex st = #pixel if @insout st = 1/st endif complex a7 = 1/7 complex sqst = sqrt(sqr(st) - a7) complex s = sqst + st complex t = sqst - st complex a6 = -(s + t)/6 complex a5 = -3*a7 complex a4 = 0.5*(s + t) complex a3 = -a5 complex a2 = -a4 complex a1 = -a7 complex q = ((((((a7*s + a6)*s + a5)*s + a4)*s + a3)*s + a2)*s + a1)*s complex r = ((((((a7*t + a6)*t + a5)*t + a4)*t + a3)*t + a2)*t + a1)*t complex pn6 = 2/(q - r) complex u = 1 - q*pn6 complex p = pn6^(1/6) complex pn2 = sqr(p) a6 = a6*p a5 = a5*pn2 a4 = a4*pn2*p a3 = a3*pn2*pn2 a2 = a2*pn2*pn2*p a1 = a1*pn6 complex a0 = u*p z = p loop: z = ((((((a7*z + a6)*z + a5)*z + a4)*z + a3)*z + a2)*z + a1)*z + a0 bailout: |z| <= @bailout default: title = "Meet12_12_0" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jeet12_12_0" seed = #pixel power = power n = n insout = insout bailout = bailout } Jeet12_12_0 { ; Generic Julia set init: complex st = @seed if @insout st = 1/st endif complex a7 = 1/7 complex sqst = sqrt(sqr(st) - a7) complex s = sqst + st complex t = sqst - st complex a6 = -(s + t)/6 complex a5 = -3*a7 complex a4 = 0.5*(s + t) complex a3 = -a5 complex a2 = -a4 complex a1 = -a7 complex q = ((((((a7*s + a6)*s + a5)*s + a4)*s + a3)*s + a2)*s + a1)*s complex r = ((((((a7*t + a6)*t + a5)*t + a4)*t + a3)*t + a2)*t + a1)*t complex pn6 = 2/(q - r) complex u = 1 - q*pn6 complex p = pn6^(1/6) complex pn2 = sqr(p) a6 = a6*p a5 = a5*pn2 a4 = a4*pn2*p a3 = a3*pn2*pn2 a2 = a2*pn2*pn2*p a1 = a1*pn6 complex a0 = u*p z = 2*#pixel loop: z = ((((((a7*z + a6)*z + a5)*z + a4)*z + a3)*z + a2)*z + a1)*z + a0 bailout: |z| <= @bailout default: title = "Jeet12_12_0" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param insout caption = "Inside Out" default = false hint = "Remaps infinity to a pole." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Meet12_12_0" power = power bailout = bailout } Meet1000_1_0 { ; Generic Mandelbrot set init: complex t = #pixel complex tb = t*@branchcut complex m = (2*t - 3)*sqr(t) complex d = 0.5*((t - 0.75)*m + t - 1.5) complex ca2 = -1.125 complex ca1 = -d complex ca0 = -sqr(m)*0.03125 complex cq = (3*ca1 - ca2*ca2)/9 complex cr = (9*ca2*ca1 - 27*ca0 - 2*ca2*ca2*ca2)/54 if real(cr) < 0 complex w = (cr - sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) else complex w = (cr + sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) endif complex wi = cq/w complex k = w - wi - ca2/3 complex sq2k = sqrt(2*k) complex mok = m/(4*sq2k) complex qrad = sqrt(2*k - 4*(mok - 0.5625 + k)) complex u0 = 0.5*(-sq2k + qrad) + 0.75 complex u1 = 0.5*(-sq2k - qrad) + 0.75 complex qrad = sqrt(2*k - 4*(-mok - 0.5625 + k)) complex u2 = 0.5*(sq2k + qrad) + 0.75 complex u3 = 0.5*(sq2k - qrad) + 0.75 complex u = 0 if |tb - u0| > |tb - u1| u = u0 u0 = u1 u1 = u endif if |tb - u2| > |tb - u3| u = u2 u2 = u3 u3 = u endif if |tb - u0| > |tb - u2| u = u0 u0 = u2 u2 = u endif if |tb - u1| > |tb - u3| u = u1 u1 = u3 u3 = u endif if |tb - u1| > |tb - u2| u = u1 u1 = u2 u2 = u endif if @sheet == 0 u = u0 elseif @sheet == 1 u = u1 elseif @sheet == 2 u = u2 elseif @sheet == 3 u = u3 elseif @sheet == 4 u = u0 if imag(tb) > 0 u = u1 endif elseif @sheet == 5 u = u1 if imag(tb) > 0 u = u2 endif else u = u2 if imag(tb) > 0 u = u3 endif endif complex s = (m*u + 1.5)/(m + 1) complex p = sqrt(6*(s - u)) complex a3 = 0.3333333333333333333 complex a2 = -0.5*p complex a0 = s*p z = a0 loop: z = (a3*z + a2)*sqr(z) + a0 bailout: |z| <= @bailout default: title = "Meet1000_1_0" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param sheet caption = "Sheets" default = 0 hint = "This has three sheets. Choose bottom, middle, top, half \ bottom half mid, or half mid half top." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jeet1000_1_0" seed = #pixel power = power sheet = sheet branchcut = branchcut bailout = bailout } Jeet1000_1_0 { ; Generic Julia set init: complex t = @seed complex tb = t*@branchcut complex m = (2*t - 3)*sqr(t) complex d = 0.5*((t - 0.75)*m + t - 1.5) complex ca2 = -1.125 complex ca1 = -d complex ca0 = -sqr(m)*0.03125 complex cq = (3*ca1 - ca2*ca2)/9 complex cr = (9*ca2*ca1 - 27*ca0 - 2*ca2*ca2*ca2)/54 if real(cr) < 0 complex w = (cr - sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) else complex w = (cr + sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) endif complex wi = cq/w complex k = w - wi - ca2/3 complex sq2k = sqrt(2*k) complex mok = m/(4*sq2k) complex qrad = sqrt(2*k - 4*(mok - 0.5625 + k)) complex u0 = 0.5*(-sq2k + qrad) + 0.75 complex u1 = 0.5*(-sq2k - qrad) + 0.75 complex qrad = sqrt(2*k - 4*(-mok - 0.5625 + k)) complex u2 = 0.5*(sq2k + qrad) + 0.75 complex u3 = 0.5*(sq2k - qrad) + 0.75 complex u = 0 if |tb - u0| > |tb - u1| u = u0 u0 = u1 u1 = u endif if |tb - u2| > |tb - u3| u = u2 u2 = u3 u3 = u endif if |tb - u0| > |tb - u2| u = u0 u0 = u2 u2 = u endif if |tb - u1| > |tb - u3| u = u1 u1 = u3 u3 = u endif if |tb - u1| > |tb - u2| u = u1 u1 = u2 u2 = u endif if @sheet == 0 u = u0 elseif @sheet == 1 u = u1 elseif @sheet == 2 u = u2 elseif @sheet == 3 u = u3 elseif @sheet == 4 u = u0 if imag(tb) > 0 u = u1 endif elseif @sheet == 5 u = u1 if imag(tb) > 0 u = u2 endif else u = u2 if imag(tb) > 0 u = u3 endif endif complex s = (m*u + 1.5)/(m + 1) complex p = sqrt(6*(s - u)) complex a3 = 0.3333333333333333333 complex a2 = -0.5*p complex a0 = s*p z = #pixel*2 loop: z = (a3*z + a2)*sqr(z) + a0 bailout: |z| <= @bailout default: title = "Jeet1000_1_0" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param sheet caption = "Sheets" default = 0 hint = "This has three sheets. Choose bottom, middle, top, half \ bottom half mid, or half mid half top." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Meet1000_1_0" power = power bailout = bailout } Meet100_n_1 { ; Generic Mandelbrot set init: complex u = #pixel complex ub = u*@branchcut float n1 = @n + 1 float n2 = @n + 2 float n3 = @n + 3 complex un1 = u^n1 complex uu = sqr(u) complex b2 = n2 - n1*u complex b1 = n1*uu - n3 complex b0 = n3*u - n2*uu complex c2 = n1*n2 complex c1 = -(u + 1)*n1*n3 complex c0 = n2*n3*u complex ia4 = 1/(un1*b2*c2 + n1) complex a3 = 0.25*(un1*(b2*c1 + b1*c2) - 2*n1 - n3)*ia4 complex a2 = (un1*(b2*c0 + b1*c1 + b0*c2) + n1 + 2*n3)*ia4 complex a1 = (un1*(b1*c0 + b0*c1) - n3)*ia4 complex a0 = un1*b0*c0*ia4 a3a3 = sqr(a3) a0 = a0 - a1*a3 + a2*a3a3 - 3*sqr(a3a3) a1 = a1 - 2*a2*a3 + 8*a3a3*a3 a2 = a2 - 6*a3a3 complex ca2 = -0.5*a2 complex ca1 = -a0 complex ca0 = 0.5*a0*a2 - 0.125*sqr(a1) complex cq = (3*ca1 - ca2*ca2)/9 complex cr = (9*ca2*ca1 - 27*ca0 - 2*ca2*ca2*ca2)/54 if real(cr) < 0 complex w = (cr - sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) else complex w = (cr + sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) endif complex wi = cq/w complex k = w - wi - ca2/3 complex sq2k = sqrt(2*k - a2) complex mok = -0.5*a1/sq2k complex qrad = sqrt(sqr(sq2k) - 4*(k + mok)) complex t0 = 0.5*(-sq2k + qrad) - a3 complex t1 = 0.5*(-sq2k - qrad) - a3 complex qrad = sqrt(sqr(sq2k) - 4*(k - mok)) complex t2 = 0.5*(sq2k + qrad) - a3 complex t3 = 0.5*(sq2k - qrad) - a3 complex t = 0 if |ub - t0| > |ub - t1| t = t0 t0 = t1 t1 = t endif if |ub - t2| > |ub - t3| t = t2 t2 = t3 t3 = t endif if |ub - t0| > |ub - t2| t = t0 t0 = t2 t2 = t endif if |ub - t1| > |ub - t3| t = t1 t1 = t3 t3 = t endif if |ub - t1| > |ub - t2| t = t1 t1 = t2 t2 = t endif if @sheet == 0 t = t0 elseif @sheet == 1 t = t1 elseif @sheet == 2 t = t2 elseif @sheet == 3 t = t3 elseif @sheet == 4 t = t0 if imag(ub) > 0 t = t1 endif elseif @sheet == 5 t = t1 if imag(ub) > 0 t = t2 endif else t = t2 if imag(ub) > 0 t = t3 endif endif complex an3 = 1/n3 complex an2 = 1/n2 complex an1 = 1/n1 complex s = (an3*t*t - an2*t)/(an2*t - an1) complex p = ((u - s)/(an3 - (1 + s)*an2 + s*an1))^an2 complex an2 = -an2*(1 + s)*p complex an1 = an1*s*p*p complex a0 = s*p z = a0 loop: z = ((an3*z + an2)*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Meet100_n_1" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param sheet caption = "Sheets" default = 0 hint = "This has three sheets. Choose bottom, middle, top, half \ bottom half mid, or half mid half top." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jeet100_n_1" seed = #pixel power = power n = n sheet = sheet branchcut = branchcut bailout = bailout } Jeet100_n_1 { ; Generic Julia set init: complex u = @seed complex ub = u*@branchcut float n1 = @n + 1 float n2 = @n + 2 float n3 = @n + 3 complex un1 = u^n1 complex uu = sqr(u) complex b2 = n2 - n1*u complex b1 = n1*uu - n3 complex b0 = n3*u - n2*uu complex c2 = n1*n2 complex c1 = -(u + 1)*n1*n3 complex c0 = n2*n3*u complex ia4 = 1/(un1*b2*c2 + n1) complex a3 = 0.25*(un1*(b2*c1 + b1*c2) - 2*n1 - n3)*ia4 complex a2 = (un1*(b2*c0 + b1*c1 + b0*c2) + n1 + 2*n3)*ia4 complex a1 = (un1*(b1*c0 + b0*c1) - n3)*ia4 complex a0 = un1*b0*c0*ia4 a3a3 = sqr(a3) a0 = a0 - a1*a3 + a2*a3a3 - 3*sqr(a3a3) a1 = a1 - 2*a2*a3 + 8*a3a3*a3 a2 = a2 - 6*a3a3 complex ca2 = -0.5*a2 complex ca1 = -a0 complex ca0 = 0.5*a0*a2 - 0.125*sqr(a1) complex cq = (3*ca1 - ca2*ca2)/9 complex cr = (9*ca2*ca1 - 27*ca0 - 2*ca2*ca2*ca2)/54 if real(cr) < 0 complex w = (cr - sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) else complex w = (cr + sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) endif complex wi = cq/w complex k = w - wi - ca2/3 complex sq2k = sqrt(2*k - a2) complex mok = -0.5*a1/sq2k complex qrad = sqrt(sqr(sq2k) - 4*(k + mok)) complex t0 = 0.5*(-sq2k + qrad) - a3 complex t1 = 0.5*(-sq2k - qrad) - a3 complex qrad = sqrt(sqr(sq2k) - 4*(k - mok)) complex t2 = 0.5*(sq2k + qrad) - a3 complex t3 = 0.5*(sq2k - qrad) - a3 complex t = 0 if |ub - t0| > |ub - t1| t = t0 t0 = t1 t1 = t endif if |ub - t2| > |ub - t3| t = t2 t2 = t3 t3 = t endif if |ub - t0| > |ub - t2| t = t0 t0 = t2 t2 = t endif if |ub - t1| > |ub - t3| t = t1 t1 = t3 t3 = t endif if |ub - t1| > |ub - t2| t = t1 t1 = t2 t2 = t endif if @sheet == 0 t = t0 elseif @sheet == 1 t = t1 elseif @sheet == 2 t = t2 elseif @sheet == 3 t = t3 elseif @sheet == 4 t = t0 if imag(ub) > 0 t = t1 endif elseif @sheet == 5 t = t1 if imag(ub) > 0 t = t2 endif else t = t2 if imag(ub) > 0 t = t3 endif endif complex an3 = 1/n3 complex an2 = 1/n2 complex an1 = 1/n1 complex s = (an3*t*t - an2*t)/(an2*t - an1) complex p = ((u - s)/(an3 - (1 + s)*an2 + s*an1))^an2 complex an2 = -an2*(1 + s)*p complex an1 = an1*s*p*p complex a0 = s*p z = 2*#pixel loop: z = ((an3*z + an2)*z + an1)*z^(@n + 1) + a0 bailout: |z| <= @bailout default: title = "Jeet100_n_1" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param n caption = "Order" default = 1 hint = "This defines the order of the fourth critical point." endparam param sheet caption = "Sheets" default = 0 hint = "This has three sheets. Choose bottom, middle, top, half \ bottom half mid, or half mid half top." endparam param branchcut caption = "Branch Cut" default = (1,0) hint = "There are two sheets to this paramaritization. Use (-1,0) \ to see the other sheet." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Meet100_n_1" power = power bailout = bailout } Meet10_1_0 { ; Generic Mandelbrot set init: complex s = #pixel complex p = sqrt(6*s - 9) complex a3 = 0.3333333333333333333 complex a2 = -0.5*p complex a0 = s*p z = a0 loop: z = (a3*z + a2)*sqr(z) + a0 bailout: |z| <= @bailout default: title = "Meet10_1_0" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jeet10_1_0" seed = #pixel power = power bailout = bailout } Jeet10_1_0 { ; Generic Julia set init: complex s = @seed complex p = sqrt(6*s - 9) complex a3 = 0.3333333333333333333 complex a2 = -0.5*p complex a0 = s*p z = #pixel*2 loop: z = (a3*z + a2)*sqr(z) + a0 bailout: |z| <= @bailout default: title = "Jeet10_1_0" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Meet10_1_0" power = power bailout = bailout } Critfix { ; Generic Mandelbrot set init: complex a3 = 0.3333333333333333333 complex a2 = -0.5*#pixel z = #pixel loop: z = (a3*z + a2)*sqr(z) bailout: |z| <= @bailout default: title = "Critfix" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jritfix" seed = #pixel power = power bailout = bailout } Jritfix { ; Generic Julia set init: complex a3 = 0.3333333333333333333 complex a2 = -0.5*@seed z = #pixel loop: z = (a3*z + a2)*sqr(z) bailout: |z| <= @bailout default: title = "Jritfix" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Critfix" power = power bailout = bailout } Critper3 { ; Generic Mandelbrot set init: complex s = #pixel ; s = 1 - 1/s ; s = 1 - 1/s complex a3 = 0.3333333333333333333 complex pp = (1/(s - s*s) - s)*3/s complex a0 = sqrt(pp) complex a2 = a0*((s - 1)/pp - a3) z = -2*a2 loop: z = (a3*z + a2)*sqr(z) + a0 bailout: |z| <= @bailout default: title = "Critper3" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jritper3" seed = #pixel power = power bailout = bailout } Jritper3 { ; Generic Julia set init: complex s = @seed ; s = 1 - 1/s ; s = 1 - 1/s complex a3 = 0.3333333333333333333 complex pp = (1/(s - s*s) - s)*3/s complex a0 = sqrt(pp) complex a2 = a0*((s - 1)/pp - a3) z = #pixel*2 loop: z = (a3*z + a2)*sqr(z) + a0 bailout: |z| <= @bailout default: title = "Jritper3" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Critper3" power = power bailout = bailout } Cccritper3 { ; Generic Mandelbrot set init: complex s = #pixel complex ca2 = -1.5 + s complex ca1 = -1.5 - s complex ca0 = 1 complex cq = (3*ca1 - ca2*ca2)/9 complex cr = (9*ca2*ca1 - 27*ca0 - 2*ca2*ca2*ca2)/54 if real(cr) < 0 complex w = (cr - sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) else complex w = (cr + sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) endif complex wi = cq/w complex s = w - wi - ca2/3 ; s = 1 - 1/s ; s = 1 - 1/s complex a5 = 0.2 complex a4 = -0.25 complex a3 = 0.3333333333333333333 complex a2 = -0.5 complex ss = sqr(s) complex smss = s - ss complex pppp = 10*(ss - s + 1)*(ss*(s - 2) - s + 1)/(smss*smss*smss) complex pp = sqrt(pppp) complex p = sqrt(pp) complex t = (60*(s - 1) + pppp*(3 - 5*s))/(pppp*5*(1 - 2*s)) complex a4 = a4*p*(1 + t + s) complex a3 = a3*pp*(s + t + s*t) complex a2 = a2*p*pp*s*t z = t*p loop: z = (((a5*z + a4)*z + a3)*z + a2)*sqr(z) + p bailout: |z| <= @bailout default: title = "Cccritper3" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jccritper3" seed = #pixel power = power bailout = bailout } Jccritper3 { ; Generic Julia set init: complex s = @seed complex ca2 = -1.5 + s complex ca1 = -1.5 - s complex ca0 = 1 complex cq = (3*ca1 - ca2*ca2)/9 complex cr = (9*ca2*ca1 - 27*ca0 - 2*ca2*ca2*ca2)/54 if real(cr) < 0 complex w = (cr - sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) else complex w = (cr + sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) endif complex wi = cq/w complex s = w - wi - ca2/3 ; s = 1 - 1/s ; s = 1 - 1/s complex a5 = 0.2 complex a4 = -0.25 complex a3 = 0.3333333333333333333 complex a2 = -0.5 complex ss = sqr(s) complex smss = s - ss complex pppp = 10*(ss - s + 1)*(ss*(s - 2) - s + 1)/(smss*smss*smss) complex pp = sqrt(pppp) complex p = sqrt(pp) complex t = (60*(s - 1) + pppp*(3 - 5*s))/(pppp*5*(1 - 2*s)) complex a4 = a4*p*(1 + t + s) complex a3 = a3*pp*(s + t + s*t) complex a2 = a2*p*pp*s*t z = #pixel*2 loop: z = (((a5*z + a4)*z + a3)*z + a2)*sqr(z) + p bailout: |z| <= @bailout default: title = "Jccritper3" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Cccritper3" power = power bailout = bailout } Ccritper3 { ; Generic Mandelbrot set init: complex s = #pixel complex a4 = 0.25 complex a3 = -0.3333333333333333333 complex a2 = 0.5 complex ss = sqr(s) complex smss = s - ss complex ppp = 4*((2*s - 3)*(s - 1)*ss - 1)/(smss*smss) complex p = ppp^(1/3) complex t = 6*(s - 1)/ppp + 0.5 complex a3 = a3*p*(1 + t) complex a2 = a2*p*p*t z = t*p loop: z = ((a4*z + a3)*z + a2)*sqr(z) + p bailout: |z| <= @bailout default: title = "Ccritper3" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jcritper3" seed = #pixel power = power bailout = bailout } Jcritper3 { ; Generic Julia set init: complex s = @seed complex a4 = 0.25 complex a3 = -0.3333333333333333333 complex a2 = 0.5 complex ss = sqr(s) complex smss = s - ss complex ppp = 4*((2*s - 3)*(s - 1)*ss - 1)/(smss*smss) complex p = ppp^(1/3) complex t = 6*(s - 1)/ppp + 0.5 complex a3 = a3*p*(1 + t) complex a2 = a2*p*p*t z = #pixel*2 loop: z = ((a4*z + a3)*z + a2)*sqr(z) + p bailout: |z| <= @bailout default: title = "Jcritper3" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Ccritper3" power = power bailout = bailout } Parab3 { ; Generic Mandelbrot set init: complex angl = (sqrt(@start*@start+4)-@start)/2 angl = 1/(@cfrac2 + angl) angl = 1/(@cfrac1 + angl) angl = exp(angl*#pi*(0,2))*@lambda complex a3 = 0.3333333333333333333 complex a2 = sqrt(#pixel) complex sqterm = sqrt(#pixel - angl) z = -a2 + sqterm z2 = -a2 - sqterm loop: z = ((a3*z + a2)*z + angl)*z z2 = ((a3*z2 + a2)*z2 + angl)*z2 if |z2| > @bailout z = z2 endif bailout: |z| <= @bailout default: title = "Parab3" center = (0, 0) param lambda caption = "Parabolic Multiplier" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param start caption = "Starting point" default = (0,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param cfrac1 caption = "Cont Frac 1" default = (0,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param cfrac2 caption = "Cont Frac 2" default = (0,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param startpix caption = "Start at Pix" default = true hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jarab3" seed = #pixel bailout = bailout lambda = lambda start = start cfrac1 = cfrac1 cfrac2 = cfrac2 } Jarab3 { ; Generic Julia set init: complex angl = (sqrt(@start*@start+4)-@start)/2 angl = 1/(@cfrac2 + angl) angl = 1/(@cfrac1 + angl) angl = exp(angl*#pi*(0,2))*@lambda complex a3 = 0.3333333333333333333 complex a2 = sqrt(@seed) z = 2*#pixel loop: z = ((a3*z + a2)*z + angl)*z bailout: |z| <= @bailout default: title = "Jarab3" param lambda caption = "Parabolic Multiplier" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param start caption = "Starting point" default = (0,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param cfrac1 caption = "Cont Frac 1" default = (0,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param cfrac2 caption = "Cont Frac 2" default = (0,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Parab3" power = power bailout = bailout } Parabper2 { ; Generic Mandelbrot set init: complex angl = (sqrt(@start*@start+4)-@start)/2 angl = 1/(@cfrac2 + angl) angl = 1/(@cfrac1 + angl) angl = exp(angl*#pi*(0,2))*@lambda complex a3 = 0.3333333333333333333 pp = #pixel complex a1 = (pp - 6 + sqrt(sqr(pp - 6) - 36*angl))/6 ; complex pp = 3*(a1 + 2 + angl/a1) complex m = 2*(pp + 3 + 3*a1)/(3*pp) complex a0 = sqrt(pp) complex a2 = -0.5*m*a0 complex sqterm = sqrt(sqr(a2) - a1) z = -a2 + sqterm z2 = -a2 - sqterm loop: z = ((a3*z + a2)*z + a1)*z + a0 z2 = ((a3*z2 + a2)*z2 + a1)*z2 + a0 if |z2| > @bailout z = z2 endif bailout: |z| <= @bailout default: title = "Parabper2" center = (0, 0) param lambda caption = "Parabolic Multiplier" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param start caption = "Starting point" default = (0,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param cfrac1 caption = "Cont Frac 1" default = (0,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param cfrac2 caption = "Cont Frac 2" default = (0,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param startpix caption = "Start at Pix" default = true hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jarabper2" seed = #pixel bailout = bailout lambda = lambda start = start cfrac1 = cfrac1 cfrac2 = cfrac2 } Jarabper2 { ; Generic Julia set init: complex angl = (sqrt(@start*@start+4)-@start)/2 angl = 1/(@cfrac2 + angl) angl = 1/(@cfrac1 + angl) angl = exp(angl*#pi*(0,2))*@lambda complex a3 = 0.3333333333333333333 complex pp = @seed complex a1 = (pp - 6 + sqrt(sqr(pp - 6) - 36*angl))/6 ; complex pp = 3*(a1 + 2 + angl/a1) complex m = 2*(pp + 3 + 3*a1)/(3*pp) complex a0 = sqrt(pp) complex a2 = -0.5*m*a0 z = 2*#pixel loop: z = ((a3*z + a2)*z + a1)*z + a0 bailout: |z| <= @bailout default: title = "Jarabper2" param lambda caption = "Parabolic Multiplier" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param start caption = "Starting point" default = (0,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param cfrac1 caption = "Cont Frac 1" default = (0,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param cfrac2 caption = "Cont Frac 2" default = (0,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Parabper2" power = power bailout = bailout } Rotate3 { ; Generic Mandelbrot set init: complex a3 = 0.3333333333333333333 z = sqrt(#pixel) loop: z = (a3*sqr(z) - #pixel)*z bailout: |z| <= @bailout default: title = "Rotate3" center = (0, 0) param lambda caption = "Parabolic Multiplier" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param startpix caption = "Start at Pix" default = true hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jotate3" seed = #pixel bailout = bailout lambda = lambda } Jotate3 { ; Generic Julia set init: complex a3 = 0.3333333333333333333 z = #pixel loop: z = (a3*sqr(z) - @seed)*z bailout: |z| <= @bailout default: title = "Jotate3" param lambda caption = "Parabolic Multiplier" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Rotate3" power = power bailout = bailout } Conjsym { ; Generic Mandelbrot set init: complex a3 = 0.3333333333333333333 complex p = sqrt(#pixel) complex a2 = -real(p) complex a1 = |p| z = p loop: z = ((a3*z + a2)*z + a1)*z bailout: |z| <= @bailout default: title = "Conjsym" center = (0, 0) param lambda caption = "Parabolic Multiplier" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param startpix caption = "Start at Pix" default = true hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jonjsym" seed = #pixel bailout = bailout lambda = lambda } Jonjsym { ; Generic Julia set init: complex a3 = 0.3333333333333333333 complex p = sqrt(@seed) complex a2 = -real(p) complex a1 = |p| z = #pixel loop: z = ((a3*z + a2)*z + a1)*z bailout: |z| <= @bailout default: title = "Jonjsym" param lambda caption = "Parabolic Multiplier" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Conjsym" power = power bailout = bailout } Leapfix { ; Generic Mandelbrot set init: complex a3 = 0.3333333333333333333 complex a2 = -2*#pixel complex a1 = 3*#pixel*#pixel z = #pixel loop: z = ((a3*z + a2)*z + a1)*z bailout: |z| <= @bailout default: title = "Leapfix" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jeapfix" seed = #pixel power = power bailout = bailout } Jeapfix { ; Generic Julia set init: complex a3 = 0.3333333333333333333 complex a2 = -2*@seed complex a1 = 3*@seed*@seed z = #pixel loop: z = ((a3*z + a2)*z + a1)*z bailout: |z| <= @bailout default: title = "Jeapfix" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Leapfix" power = power bailout = bailout } Stepfix { ; Generic Mandelbrot set init: complex a3 = 0.3333333333333333333 complex opix = 3/(4*#pixel) complex xm1 = (#pixel + opix)/sqrt(3) complex p = (#pixel - opix)/xm1 complex q = 2*(xm1 + 1)/p + a3*p complex a2 = -0.5*(p + q) complex a1 = p*q z = q loop: z = ((a3*z + a2)*z + a1)*z bailout: |z| <= @bailout default: title = "Stepfix" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jtepfix" seed = #pixel power = power bailout = bailout } Jtepfix { ; Generic Julia set init: complex a3 = 0.3333333333333333333 complex opix = 3/(4*@seed) complex xm1 = (@seed + opix)/sqrt(3) complex p = (@seed - opix)/xm1 complex q = 2*(xm1 + 1)/p + a3*p complex a2 = -0.5*(p + q) complex a1 = p*q z = #pixel loop: z = ((a3*z + a2)*z + a1)*z bailout: |z| <= @bailout default: title = "Jtepfix" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Stepfix" power = power bailout = bailout } Stepfix2 { ; Generic Mandelbrot set init: complex s = #pixel complex u = (2*sqr(s) - 3*s)/(3*s - 6) complex p = sqrt(6*s/(3*u - 1)) complex a3 = 0.3333333333333333333 complex a2 = -0.5*(1 + u)*p complex a1 = u*sqr(p) z = p*u loop: z = ((a3*z + a2)*z + a1)*z bailout: |z| <= @bailout default: title = "Stepfix2" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jtepfix2" seed = #pixel power = power bailout = bailout } Jtepfix2 { ; Generic Julia set init: complex s = @seed complex u = (2*sqr(s) - 3*s)/(3*s - 6) complex p = sqrt(6*s/(3*u - 1)) complex a3 = 0.3333333333333333333 complex a2 = -0.5*(1 + u)*p complex a1 = u*sqr(p) z = #pixel loop: z = ((a3*z + a2)*z + a1)*z bailout: |z| <= @bailout default: title = "Jtepfix2" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Stepfix2" power = power bailout = bailout } Stepper2 { ; Generic Mandelbrot set init: complex s = #pixel complex p = sqrt(-3*sqr(s)) complex a3 = 0.3333333333333333333 complex a2 = -0.5*p complex a0 = p/s z = p loop: z = (a3*z + a2)*sqr(z) + a0 bailout: |z| <= @bailout default: title = "Stepper2" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jtepper2" seed = #pixel power = power bailout = bailout } Jtepper2 { ; Generic Julia set init: complex s = @seed complex p = sqrt(-3*sqr(s)) complex a3 = 0.3333333333333333333 complex a2 = -0.5*p complex a0 = p/s z = #pixel*2 loop: z = (a3*z + a2)*sqr(z) + a0 bailout: |z| <= @bailout default: title = "Jtepper2" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Stepper2" power = power bailout = bailout } Stepfix3 { ; Generic Mandelbrot set init: complex t = #pixel complex s = 0 complex cr1 = 0.5*(flip(sqrt(3)) - 1) complex cr2 = sqr(cr1) complex t2 = sqr(t) complex ca2 = (t - 2)*t2 - 2 complex ca1 = 1 + (3 - t2)*t2 complex ca0 = (2*t2 - 3*t)*t2 complex cq = (3*ca1 - ca2*ca2)/9 complex cr = (9*ca2*ca1 - 27*ca0 - 2*ca2*ca2*ca2)/54 if real(cr) < 0 complex w = (cr - sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) else complex w = (cr + sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) endif complex wi = cq/w complex s0 = w - wi complex s1 = w*cr1 - wi*cr2 complex s2 = w*cr2 - wi*cr1 if |s0| > |s1| s = s0 s0 = s1 s1 = s endif if |s0| > |s2| s = s0 s0 = s2 s2 = s endif if |s1| > |s2| s = s1 s1 = s2 s2 = s endif s = s1 if @sheet == 0 s = s0 elseif @sheet == 1 s = s1 elseif @sheet == 2 s = s2 elseif @sheet == 4 if imag(t) > 0 s = s0 endif else if imag(t) > 0 s = s2 endif endif complex s = s - ca2/3 complex u = (2*sqr(s) - 3*s)/(3*s - 6) complex p = sqrt(6*t/(3*u - 1)) complex a3 = 0.3333333333333333333 complex a2 = -0.5*(1 + u)*p complex a1 = u*sqr(p) z = p*u loop: z = ((a3*z + a2)*z + a1)*z bailout: |z| <= @bailout default: title = "Stepfix3" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param sheet caption = "Sheets" default = 3 hint = "This has three sheets. Choose bottom, middle, top, half \ bottom half mid, or half mid half top." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Jtepfix3" seed = #pixel sheet = sheet bailout = bailout } Jtepfix3 { ; Generic Julia set init: complex t = @seed complex s = 0 complex cr1 = 0.5*(flip(sqrt(3)) - 1) complex cr2 = sqr(cr1) complex t2 = sqr(t) complex ca2 = (t - 2)*t2 - 2 complex ca1 = 1 + (3 - t2)*t2 complex ca0 = (2*t2 - 3*t)*t2 complex cq = (3*ca1 - ca2*ca2)/9 complex cr = (9*ca2*ca1 - 27*ca0 - 2*ca2*ca2*ca2)/54 if real(cr) < 0 complex w = (cr - sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) else complex w = (cr + sqrt(sqr(cr) + cq*sqr(cq)))^(1/3) endif complex wi = cq/w complex s0 = w - wi complex s1 = w*cr1 - wi*cr2 complex s2 = w*cr2 - wi*cr1 if |s0| > |s1| s = s0 s0 = s1 s1 = s endif if |s0| > |s2| s = s0 s0 = s2 s2 = s endif if |s1| > |s2| s = s1 s1 = s2 s2 = s endif s = s1 if @sheet == 0 s = s0 elseif @sheet == 1 s = s1 elseif @sheet == 2 s = s2 elseif @sheet == 4 if imag(t) > 0 s = s0 endif else if imag(t) > 0 s = s2 endif endif complex s = s - ca2/3 complex u = (2*sqr(s) - 3*s)/(3*s - 6) complex p = sqrt(6*t/(3*u - 1)) complex a3 = 0.3333333333333333333 complex a2 = -0.5*(1 + u)*p complex a1 = u*sqr(p) z = #pixel loop: z = ((a3*z + a2)*z + a1)*z bailout: |z| <= @bailout default: title = "Jtepfix3" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param sheet caption = "Sheets" default = 3 hint = "This has three sheets. Choose bottom, middle, top, half \ bottom half mid, or half mid half top." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Stepfix3" power = power bailout = bailout } Three2two { ; Generic Mandelbrot set init: complex a = -6*#pixel*#pixel complex b = 8*#pixel*#pixel*#pixel complex c = -3*sqr(sqr(#pixel)) - 2*#pixel z = @start*#pixel loop: z = sqr(sqr(z)) + a*sqr(z) + b*z + c bailout: |z| <= @bailout default: title = "Three2two" center = (0, 0) param start caption = "Starting point" default = (1,0) hint = "Perturbation. Use (1,0) for the standard Mandelbrot set." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Mandelbrot set. Use (1,0) \ for the standard Mandelbrot set." endparam param bailout caption = "Bailout value" default = 20.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Phree2two" seed = #pixel power = power bailout = bailout } Phree2two { ; Generic Julia set init: complex a = -6*@seed*@seed complex b = 8*@seed*@seed*@seed complex c = -3*sqr(sqr(@seed)) - 2*@seed z = #pixel loop: z = sqr(sqr(z)) + a*sqr(z) + b*z + c bailout: |z| <= @bailout default: title = "Phree2two" param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (1,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 20.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Three2two" power = power bailout = bailout } Elephant { ; Limit Zoom of Mandelbrot set init: bool indeep = true float itoffset = 0 float dives = 1 z = @start + #pixel loop: if indeep float offstep = round(real(z)) itoffset = itoffset - offstep - 1 w = z - offstep if abs(imag(w)) < 2.8 if imag(w) < 0 v = conj(w) - flip(2.5) else v = w - flip(2.5) endif u = (-9.748504903269681800e+000, 2.259406621999715100e+000) + v*(\ (9.066551936825199000e-001, -2.074036912056804700e-002) + v*(\ (-3.805799272742944400e-003, -1.681810353755348100e-003) + v*(\ (-1.894938525219343400e-004, -1.302399607326304500e-004) + v*(\ (-9.820676162509018900e-006, -9.700372281676589600e-006) + v*(\ (-5.009257444112947900e-007, -6.975630290977511300e-007) + v*(\ (-2.419924187157992000e-008, -4.854092718027711000e-008) + v*(\ (-1.053944888602629400e-009, -3.273170060340258300e-009) + v*(\ (-3.708112447306889500e-011, -2.140962484898100300e-010) + v*(\ (-6.130111067563060900e-013, -1.359937108405049500e-011) + v*(\ (5.360928355699816400e-014, -8.404644516378927200e-013) + v*(\ (7.571979062819036800e-015, -5.072519731879296900e-014) + v*\ (6.043020754909982700e-016, -3.011389687670057400e-015)))))))))))) if imag(w) < 0 z = 0.5*(conj(u) - 1)/(conj(u) + 1) else z = 0.5*(u - 1)/(u + 1) endif itoffset = itoffset - 12 indeep = false elseif imag(w) > 10 if imag(#pixel) < #pi float bigleap = ceil((imag(w) - 10)/(#pi - imag(#pixel))) dives = dives + bigleap z = w + bigleap*(#pixel - flip(#pi)) endif elseif imag(w) < -10 if imag(#pixel) > -#pi float bigleap = ceil((imag(w) + 10)/(-#pi - imag(#pixel))) dives = dives + bigleap z = w + bigleap*(#pixel + flip(#pi)) endif else if imag(w) < 0 v = exp(2*#pi*(0,1)*(conj(w) - flip(2.6))) else v = exp(2*#pi*(0,1)*(w - flip(2.6))) endif u = v*(\ (-1.771574422374822400e+000, 3.008158248718677500e-001) + v*(\ (1.161247798855508100e+000, 1.060150347288251200e-001) + v*(\ (-6.186486776521550300e-001, -1.823642041315733100e-001) + v*(\ (3.150728651773144200e-001, 1.671571437687602900e-001) + v*(\ (-1.508025170404382100e-001, -1.222711022593431100e-001) + v*(\ (6.763170397465391400e-002, 8.111202917057371000e-002) + v*(\ (-2.754198423864979300e-002, -5.019684071459873400e-002) + v*(\ (9.426710531076781100e-003, 2.954351158578514800e-002) + v*(\ (-1.945294976491386600e-003, -1.666645207806186100e-002) + v*(\ (-6.918190444668266900e-004, 9.047294640745664000e-003) + v*(\ (1.301997331051690500e-003, -4.728449782213820600e-003) + v*(\ (-1.178791499364848500e-003, 2.373391527693483800e-003) + v*(\ (8.699587806287360200e-004, -1.136825824027341700e-003) + v*(\ (-5.784523251938663300e-004, 5.129463920949076700e-004) + v*\ (3.594977319353187400e-004, -2.122520653691554400e-004))))))))))))))) if imag(w) < 0 z = w + conj(u) + flip(#pi) + #pixel else z = w + u - flip(#pi) + #pixel endif dives = dives + 1 endif elseif |z - 0.51| < 0.01 && real(z) < 0.56 w = (1 + 2*z)/(1 - 2*z) v = 1/w u = v*(\ -5.000000000000000000e-001 + v*(\ 3.333333333333333700e-001 + v*(\ -1.388888888888888700e-001 + v*(\ 1.375000000000000400e-001 + v*(\ -9.055555555555550000e-002 + v*(\ 6.137566137566145100e-002 + v*(\ -8.058390022675728000e-002 + v*(\ 4.564318783068788100e-002 + v*(\ -1.297251616696071300e-002 + v*(\ 1.087715247715244500e-001 + v*(\ -2.769523335811253600e-002 + v*(\ -2.206830521587462600e-001 + v*(\ -4.967267290859304600e-001 + v*(\ 5.171815482745201200e-001 + v*(\ 3.597365161478478500e+000 + v*\ 3.236962427432480600e+000))))))))))))))) if real(w) > 0 || abs(imag(w)) > 10 z = #pixel + w - log(w) + u dives = dives + 1 else z = w - log(-w) + u endif itoffset = itoffset - 1 indeep = true else z = sqr(z) + 0.25 endif bailout: indeep || (|z| <= @bailout) default: title = "Elephant" center = (0, 0) param start caption = "Starting point" default = (0.76799378613615426,0) hint = "Perturbation. Use (0.76799378613615426,0) for \ the standard Mandelbrot set." endparam param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (2,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam switch: type = "Julphant" seed = #pixel power = power bailout = bailout } Julphant { ; Julia Sets for Limit Zooms of Mandelbrot set init: bool indeep = @deepness float itoffset = 0 float dives = 0 z = #pixel loop: if indeep float offstep = round(real(z)) itoffset = itoffset - offstep - 1 w = z - offstep if abs(imag(w)) < 2.8 if imag(w) < 0 v = conj(w) - flip(2.5) else v = w - flip(2.5) endif u = (-9.748504903269681800e+000, 2.259406621999715100e+000) + v*(\ (9.066551936825199000e-001, -2.074036912056804700e-002) + v*(\ (-3.805799272742944400e-003, -1.681810353755348100e-003) + v*(\ (-1.894938525219343400e-004, -1.302399607326304500e-004) + v*(\ (-9.820676162509018900e-006, -9.700372281676589600e-006) + v*(\ (-5.009257444112947900e-007, -6.975630290977511300e-007) + v*(\ (-2.419924187157992000e-008, -4.854092718027711000e-008) + v*(\ (-1.053944888602629400e-009, -3.273170060340258300e-009) + v*(\ (-3.708112447306889500e-011, -2.140962484898100300e-010) + v*(\ (-6.130111067563060900e-013, -1.359937108405049500e-011) + v*(\ (5.360928355699816400e-014, -8.404644516378927200e-013) + v*(\ (7.571979062819036800e-015, -5.072519731879296900e-014) + v*\ (6.043020754909982700e-016, -3.011389687670057400e-015)))))))))))) if imag(w) < 0 z = 0.5*(conj(u) - 1)/(conj(u) + 1) else z = 0.5*(u - 1)/(u + 1) endif itoffset = itoffset - 12 indeep = false elseif imag(w) > 10 if imag(@seed) < #pi if @bigon float bigleap = ceil((imag(w) - 10)/(#pi - imag(@seed))) dives = dives + bigleap z = w + bigleap*(@seed - flip(#pi)) else dives = dives + 1 z = w + @seed - flip(#pi) endif endif elseif imag(w) < -10 if imag(@seed) > -#pi if @bigon float bigleap = ceil((imag(w) + 10)/(-#pi - imag(@seed))) dives = dives + bigleap z = w + bigleap*(@seed + flip(#pi)) else dives = dives + 1 z = w + @seed + flip(#pi) endif endif else if imag(w) < 0 v = exp(2*#pi*(0,1)*(conj(w) - flip(2.6))) else v = exp(2*#pi*(0,1)*(w - flip(2.6))) endif u = v*(\ (-1.771574422374822400e+000, 3.008158248718677500e-001) + v*(\ (1.161247798855508100e+000, 1.060150347288251200e-001) + v*(\ (-6.186486776521550300e-001, -1.823642041315733100e-001) + v*(\ (3.150728651773144200e-001, 1.671571437687602900e-001) + v*(\ (-1.508025170404382100e-001, -1.222711022593431100e-001) + v*(\ (6.763170397465391400e-002, 8.111202917057371000e-002) + v*(\ (-2.754198423864979300e-002, -5.019684071459873400e-002) + v*(\ (9.426710531076781100e-003, 2.954351158578514800e-002) + v*(\ (-1.945294976491386600e-003, -1.666645207806186100e-002) + v*(\ (-6.918190444668266900e-004, 9.047294640745664000e-003) + v*(\ (1.301997331051690500e-003, -4.728449782213820600e-003) + v*(\ (-1.178791499364848500e-003, 2.373391527693483800e-003) + v*(\ (8.699587806287360200e-004, -1.136825824027341700e-003) + v*(\ (-5.784523251938663300e-004, 5.129463920949076700e-004) + v*\ (3.594977319353187400e-004, -2.122520653691554400e-004))))))))))))))) if imag(w) < 0 z = w + conj(u) + flip(#pi) + @seed else z = w + u - flip(#pi) + @seed endif dives = dives + 1 endif elseif |z - 0.51| < 0.01 && real(z) < 0.56 w = (1 + 2*z)/(1 - 2*z) v = 1/w u = v*(\ -5.000000000000000000e-001 + v*(\ 3.333333333333333700e-001 + v*(\ -1.388888888888888700e-001 + v*(\ 1.375000000000000400e-001 + v*(\ -9.055555555555550000e-002 + v*(\ 6.137566137566145100e-002 + v*(\ -8.058390022675728000e-002 + v*(\ 4.564318783068788100e-002 + v*(\ -1.297251616696071300e-002 + v*(\ 1.087715247715244500e-001 + v*(\ -2.769523335811253600e-002 + v*(\ -2.206830521587462600e-001 + v*(\ -4.967267290859304600e-001 + v*(\ 5.171815482745201200e-001 + v*(\ 3.597365161478478500e+000 + v*\ 3.236962427432480600e+000))))))))))))))) if real(w) > 0 || abs(imag(w)) > 10 z = @seed + w - log(w) + u dives = dives + 1 else z = w - log(-w) + u endif itoffset = itoffset - 1 indeep = true else z = sqr(z) + 0.25 endif bailout: indeep || (|z| <= @bailout) default: title = "Julphant" center = (0, 0) param start caption = "Starting point" default = (0,0) hint = "Perturbation. Use (0,0) for the standard Mandelbrot set." endparam param deepness caption = "Start Deep" default = false hint = "View the Julia set from a normal viewpoint or \ from the depths of the parabolic point." endparam param bigon caption = "Big Leaps" default = true hint = "Big leaps have a buggy interaction with Julphant\ and coloring dives. Match this to Coloring Big Leaps" endparam param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (2,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 128.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam } Elerev0 { ; Limit Zoom of Mandelbrot set init: bool indeep = false float itoffset = 0 float dives = 0 z = @start loop: if indeep float offstep = round(real(z)) itoffset = itoffset - offstep - 1 w = z - offstep if abs(imag(w)) < 2.8 if imag(w) < 0 v = conj(w) - 2.5 else v = w - 2.5 endif u = (-9.748504903269681800e+000, 2.259406621999715100e+000) + v*(\ (9.066551936825199000e-001, -2.074036912056804700e-002) + v*(\ (-3.805799272742944400e-003, -1.681810353755348100e-003) + v*(\ (-1.894938525219343400e-004, -1.302399607326304500e-004) + v*(\ (-9.820676162509018900e-006, -9.700372281676589600e-006) + v*(\ (-5.009257444112947900e-007, -6.975630290977511300e-007) + v*(\ (-2.419924187157992000e-008, -4.854092718027711000e-008) + v*(\ (-1.053944888602629400e-009, -3.273170060340258300e-009) + v*(\ (-3.708112447306889500e-011, -2.140962484898100300e-010) + v*(\ (-6.130111067563060900e-013, -1.359937108405049500e-011) + v*(\ (5.360928355699816400e-014, -8.404644516378927200e-013) + v*(\ (7.571979062819036800e-015, -5.072519731879296900e-014) + v*\ (6.043020754909982700e-016, -3.011389687670057400e-015)))))))))))) if imag(w) < 0 z = 0.5*(conj(u) - 1)/(conj(u) + 1) else z = 0.5*(u - 1)/(u + 1) endif itoffset = itoffset - 12 indeep = false elseif imag(w) > 10 if imag(#pixel) < #pi float bigleap = ceil((imag(w) - 10)/(#pi - imag(#pixel))) dives = dives + bigleap z = w + bigleap*(#pixel - flip(#pi)) endif elseif imag(w) < -10 if imag(#pixel) > -#pi float bigleap = ceil((imag(w) + 10)/(-#pi - imag(#pixel))) dives = dives + bigleap z = w + bigleap*(#pixel + flip(#pi)) endif else if imag(w) < 0 v = exp(2*#pi*(0,1)*(conj(w) - 2.6)) else v = exp(2*#pi*(0,1)*(w - 2.6)) endif u = v*(\ (-1.771574422374822400e+000, 3.008158248718677500e-001) + v*(\ (1.161247798855508100e+000, 1.060150347288251200e-001) + v*(\ (-6.186486776521550300e-001, -1.823642041315733100e-001) + v*(\ (3.150728651773144200e-001, 1.671571437687602900e-001) + v*(\ (-1.508025170404382100e-001, -1.222711022593431100e-001) + v*(\ (6.763170397465391400e-002, 8.111202917057371000e-002) + v*(\ (-2.754198423864979300e-002, -5.019684071459873400e-002) + v*(\ (9.426710531076781100e-003, 2.954351158578514800e-002) + v*(\ (-1.945294976491386600e-003, -1.666645207806186100e-002) + v*(\ (-6.918190444668266900e-004, 9.047294640745664000e-003) + v*(\ (1.301997331051690500e-003, -4.728449782213820600e-003) + v*(\ (-1.178791499364848500e-003, 2.373391527693483800e-003) + v*(\ (8.699587806287360200e-004, -1.136825824027341700e-003) + v*(\ (-5.784523251938663300e-004, 5.129463920949076700e-004) + v*\ (3.594977319353187400e-004, -2.122520653691554400e-004))))))))))))))) if imag(w) < 0 z = w + conj(u) + flip(#pi) + #pixel else z = w + u - flip(#pi) + #pixel endif dives = dives + 1 endif elseif |z - 0.51| < 0.01 && real(z) < 0.56 w = (1 + 2*z)/(1 - 2*z) v = 1/w u = v*(\ -5.000000000000000000e-001 + v*(\ 3.333333333333333700e-001 + v*(\ -1.388888888888888700e-001 + v*(\ 1.375000000000000400e-001 + v*(\ -9.055555555555550000e-002 + v*(\ 6.137566137566145100e-002 + v*(\ -8.058390022675728000e-002 + v*(\ 4.564318783068788100e-002 + v*(\ -1.297251616696071300e-002 + v*(\ 1.087715247715244500e-001 + v*(\ -2.769523335811253600e-002 + v*(\ -2.206830521587462600e-001 + v*(\ -4.967267290859304600e-001 + v*(\ 5.171815482745201200e-001 + v*(\ 3.597365161478478500e+000 + v*\ 3.236962427432480600e+000))))))))))))))) if real(w) > 0 || abs(imag(w)) > 10 z = #pixel + w - log(w) + u dives = dives + 1 else z = w - log(-w) + u endif itoffset = itoffset - 1 indeep = true else z = sqr(z) + 0.25 endif bailout: (|z| <= @bailout) default: title = "Elerev0" center = (0, 0) param start caption = "Starting point" default = (0,0) hint = "Perturbation. Use (0,0) for the standard Mandelbrot set." endparam param seed caption = "Julia seed" default = (0, 0) hint = "Use this to create many different Julia sets. You can \ also set this value using the Switch feature." endparam param power caption = "Power" default = (2,0) hint = "This defines the power of the Julia set. Use (2,0) \ for the standard Julia set." endparam param bailout caption = "Bailout value" default = 20.0 min = 1.0 hint = "Defines how soon an orbit bails out, i.e. doesn't belong \ to the Mandelbrot set anymore." endparam }