Re: [Fractint] Yet another trivial...
While toying with the Lyapunov Mandelbrot formula recently posted by Morgan Owens, I noticed that the formula produces images virtually identical to those drawn by the Fractint type=hypercomplex Mandelbrot formula. I have included two parameter files, one of which uses the Lyapunov Mandelbrot formula, while the other uses the hypercomplex Mandelbrot formula, yet the two files draw identical images. Perhaps one of the math experts on the list can explain what is happening here. . . . Jim Muth jamth@mindspring.com START PARAMETER FILE======================================= Lyapunov { reset=2002 type=formula formulafile=allinone.frm formulaname=LyapunovMandel center-mag=-1.07668/7.77156e-016/1.344086 params=0/0/0/1/16/0 float=y maxiter=500 inside=0 logmap=yes periodicity=0 sound=off colors=00000e0e00eee00e0eeL0eeeLLLLLzLzLLzzzLLzLzz\ zLzzz000555888BBBEEEHHHKKKOOOSSSWWW___ccchhhmmmsss\ zzz00zG0zV0zj0zz0zz0jz0Vz0Gz00zG0zV0zj0zz0jz0Vz0Gz\ 00z00zG0zV0zj0zz0jz0Vz0GzVVzbVzjVzrVzzVzzVrzVjzVbz\ VVzbVzjVzrVzzVrzVjzVbzVVzVVzbVzjVzrVzzVrzVjzVbzhhz\ lhzqhzuhzzhzzhuzhqzhlzhhzlhzqhzuhzzhuzhqzhlzhhzhhz\ lhzqhzuhzzhuzhqzhlz00S70SE0SL0SS0SS0LS0ES07S00S70S\ E0SL0SS0LS0ES07S00S00S70SE0SL0SS0LS0ES07SEESHESLES\ OESSESSEOSELSEHSEESHESLESOESSEOSELSEHSEESEESHESLES\ OESSEOSELSEHSKKSMKSOKSQKSSKSSKQSKOSKMSKKSMKSOKSQKS\ SKQSKOSKMSKKSKKSMKSOKSQKSSKQSKOSKMS00G40G80GC0GG0G\ G0CG08G04G00G40G80GC0GG0CG08G04G00G00G40G80GC0GG0C\ G08G04G88GA8GC8GE8GG8GG8EG8CG8AG88GA8GC8GE8GG8EG8C\ G8AG88G88GA8GC8GE8GG8EG8CG8AGBBGCBGDBGFBGGBGGBFGBD\ GBCGBBGCBGDBGFBGGBFGBDGBCGBBGBBGCBGDBGFBGGBFGBDGBC\ G000000000000000000000000 } Hypercomplex { reset=2002 type=hypercomplex function=sqr center-mag=-0.5759/7.77156e-016/1.344086 params=0/0/0/0.5 float=y maxiter=500 bailout=7 inside=0 logmap=yes periodicity=0 sound=off colors=00000e0e00eee00e0eeL0eeeLLLLLzLzLLzzzLLzLzz\ zLzzz000555888BBBEEEHHHKKKOOOSSSWWW___ccchhhmmmsss\ zzz00zG0zV0zj0zz0zz0jz0Vz0Gz00zG0zV0zj0zz0jz0Vz0Gz\ 00z00zG0zV0zj0zz0jz0Vz0GzVVzbVzjVzrVzzVzzVrzVjzVbz\ VVzbVzjVzrVzzVrzVjzVbzVVzVVzbVzjVzrVzzVrzVjzVbzhhz\ lhzqhzuhzzhzzhuzhqzhlzhhzlhzqhzuhzzhuzhqzhlzhhzhhz\ lhzqhzuhzzhuzhqzhlz00S70SE0SL0SS0SS0LS0ES07S00S70S\ E0SL0SS0LS0ES07S00S00S70SE0SL0SS0LS0ES07SEESHESLES\ OESSESSEOSELSEHSEESHESLESOESSEOSELSEHSEESEESHESLES\ OESSEOSELSEHSKKSMKSOKSQKSSKSSKQSKOSKMSKKSMKSOKSQKS\ SKQSKOSKMSKKSKKSMKSOKSQKSSKQSKOSKMS00G40G80GC0GG0G\ G0CG08G04G00G40G80GC0GG0CG08G04G00G00G40G80GC0GG0C\ G08G04G88GA8GC8GE8GG8GG8EG8CG8AG88GA8GC8GE8GG8EG8C\ G8AG88G88GA8GC8GE8GG8EG8CG8AGBBGCBGDBGFBGGBGGBFGBD\ GBCGBBGCBGDBGFBGGBFGBDGBCGBBGBBGCBGDBGFBGGBFGBDGBC\ G000000000000000000000000 } frm:LyapunovMandel { narg=real(p2) nmag=imag(p2) bailout=4*(real(p3)==0)+real(p3)*(real(p3)!=0) z0=c0=pixel z1=c1=pixel+nmag*(cos(narg)+(0,1)*sin(narg)) : z0=z0*z0+c0 z1=z1*z1+c1 cabs(z0-z1)<bailout } END PARAMETER FILE=========================================
At 02:46 26/07/2002, Jim Muth wrote:
While toying with the Lyapunov Mandelbrot formula recently posted by Morgan Owens, I noticed that the formula produces images virtually identical to those drawn by the Fractint type=hypercomplex Mandelbrot formula. I have included two parameter files, one of which uses the Lyapunov Mandelbrot formula, while the other uses the hypercomplex Mandelbrot formula, yet the two files draw identical images.
Perhaps one of the math experts on the list can explain what is happening here. . . .
It comes about because hypercomplex numbers can be modelled as pairs of complex numbers; by converting them into this "dual" form, one can use functions designed to operate on complex numbers on hypercomplex numbers as well, hence their implementation in Fractint: Hypercomplex numbers have an elegant generalization of any unary complex valued function defined on the complex numbers. First, note that hypercomplex numbers can be represented as a pair of complex numbers in the following way. Let h = x + yi + zj + wk. a = (x-w) + i(y+z) b = (x+w) + i(y-z) The numbers a and b are complex numbers. We can represent h as the pair of complex numbers (a,b). Conversely, if we have a hypercomplex number given to us in the form (a,b), we can solve for x, y, z, and w. The solution to c = (x-w) + i(y+z) d = (x+w) + i(y-z) is x = (real(c) + real(d))/2 y = (imag(c) + imag(d))/2 z = (imag(c) - imag(d))/2 w = (real(d) - real(c))/2 We can now, for example, compute sin(h). First compute the two complex numbers a and b as above, then set c = sin(a) and d = sin(b) where sin() is the complex version of the sin function. Now use the equations above to solve for x, y, z, and w in terms of c and d. The hypercomplex number (x,y,z,w) thus obtained is sin(h). The beauty of this is that it really doesn't make any difference what function we use. Instead of sin, we could have used cos, sinh, ln, or z^2. Using this technique, Fractint can create 3-D fractals using the formula h' = fn(h) + c, where "fn" is any of the built-in functions. Where fn is sqr(), this is the famous mandelbrot formula, generalized to four dimensions. Fractint Version 20.0, pp 178-179 What the LyapunovMandelbrot formula amounts to (basically by accident) is to make this duality between hypercomplex numbers and pairs of complex numbers explicit (after taking into account the different approaches to parameterisation). Morgan L. Owens "Morse's Theorem says that the typical smooth function we can expect to encounter is locally quadratic near a critical point. Discuss this genericity result within the framework of the quadratic maps leading to the Mandelbrot set and its many relatives."
Jim Muth wrote:
While toying with the Lyapunov Mandelbrot formula recently posted by Morgan Owens, I noticed that the formula produces images virtually identical to those drawn by the Fractint type=hypercomplex Mandelbrot formula. I have included two parameter files, one of which uses the Lyapunov Mandelbrot formula, while the other uses the hypercomplex Mandelbrot formula, yet the two files draw identical images.
Perhaps one of the math experts on the list can explain what is happening here. . . .
[snip...] (Not being a math expert by any means... ) Well, what Morgan's formula does is calculating two Mandelbrots where one of them is shifted relative to the other. Only those points which lie in the intersection of both sets will _not_ escape regardless if they are iterated in the z0- or in the z1- formula (so the iterated values for z0 and z1 will never move very far apart and the condition "bailout >= cabs(z0-z1)" will never be met). As for hypercomplex fractals, I have rendered a few in 3D over the years and these always looked like this: Imagine two cylinders (with the cross section of a "normal" fractal in the complex numbers) intersecting one another at right angles --> and this intersection volume actually being the hypercomplex fractal (or rather it's 3D-slice). Now we take a 2D-slice out of this object with the cutting plane oriented parallel to the complex plane: If the cutting plane _is_ the complex plane we get our usual complex fractal (duh!), that's right through the center of the intersecting cylinders, both cylinder's cross-section lie on top of each other. But if we move our cutting plane forward or backward from this position, the cylinders move away from each other and, since only the intersection of both cylinders really exists, our 2D-slice of the hypercomplex fractal gets smaller and smaller (just like the intersection of the two Mandelbrot sets in the formula below by setting bigger and bigger values for the "mag" parameter). (If anything above is not quite right or even plain wrong, I'd appreciate any corrections as long as those who speak up refrain from any flaming, bashing, kicking and whatnot... ;-)) Regards, Gerald ;---------------------- BEGIN PAR ----------------------------- For_Jim_Muth { ; reset=2002 type=formula formulafile=temp.frm formulaname=SuperposeMandel center-mag=-1/0/0.6666667 params=0/0/0/1/16/0 float=y outside=summ colors=@default.map } frm:SuperposeMandel {;params=arg/mag/bailout ; narg = real(p2) nmag = imag(p2) bailout = real(p3) z = c = pixel z1 = c1 = pixel + nmag*exp(flip(narg)) mxi = maxit - 2 esc = esc1 = exit = j = 0: IF (esc == 0) z = sqr(z) + c IF (bailout < |z|) esc = 1 ENDIF ENDIF IF (esc1 == 0) z1 = sqr(z1) + c1 IF (bailout < |z1|) esc1 = 1 ENDIF ENDIF IF (j >= mxi) exit = 1 IF (esc && esc1) z = -j ELSEIF (esc) z = 1 - j ELSEIF (esc1) z = 2 - j ELSE z = 3 - j ENDIF ENDIF j = j + 1 exit == 0 } ;------------------------ END PAR -----------------------------
participants (3)
-
Gerald K. Dobiasovsky -
Jim Muth -
Morgan L. Owens