Welcome to Fractal Forums

Fractal Software => 3D Fractal Generation => Topic started by: Tglad on January 05, 2010, 02:54:14 AM




Title: Mandelbrot whirlwind
Post by: Tglad on January 05, 2010, 02:54:14 AM
Given that 3 dimensional space cannot be conformal, it is interesting to look at some alternative 3d expansions of the mandelbrot that are not fractal in every direction.
The images below are based on the idea of modifying how simultaneously the +C and the Z^2 are done.
Usually you do the Z^2 then apply the +C. If we were to make the two happen less simultaneously, then we could do Z^2 then Z^2 then +C then +C. Equally, to do them more simultaneously we could do Z^1.414 + C/2 then repeat. Or more generally, for some j: Z^(2^j) + c*j
So the 3d shape below is a map of the mandelbrot for all j.
The floor is a volume created when j<0. The 2d mandelbrot is where j=1 which is where the largest whisp sweeps out.
An interesting question is what the 2d shape is as j->0.


Title: Re: Mandelbrot whirlwind
Post by: kram1032 on January 05, 2010, 03:14:59 AM
interesting vortex :D

could you add a slice-animation?  :)

Well, both simple input and wolfram alpha tell us that at j=0 the formula reduces to z=z
but it's not said that this is still true if you consider iterations.... I'm not sure how you could put in something like the Mandelbrot set as iterations

you could also try complex values for j... for i this for instance gives:

http://www.wolframalpha.com/input/?i=simplify%28real%28complex+expand%28+i+%28a%2Bi+b%29%2B%28x%2Bi+y%29^%282^i%29%29%29%29 + i * http://www.wolframalpha.com/input/?i=simplify%28imag%28complex+expand%28+i+%28a%2Bi+b%29%2B%28x%2Bi+y%29^%282^i%29%29%29%29
:)


Title: Re: Mandelbrot whirlwind
Post by: Tglad on January 05, 2010, 04:45:53 AM
I don't think my version of UF supports animations :'(
Code:
     
              r = sqrt(|zri|)
              float zzz = zj
              float power = @mpwr ^ zzz
              float r1 = r^power
              float th = power*atan2(zri)
              zri = r1*(cos(th) + flip(sin(th))) + cri*zzz


Title: Re: Mandelbrot whirlwind
Post by: Tglad on January 06, 2010, 11:52:02 PM
Also, what I'm wondering is what shape you get as j->0, rather than when j=0.
It looks like it might be a cardoid, but its hard to tell in the pictures, and the number of iterations becomes insufficient as j->0


Title: Re: Mandelbrot whirlwind
Post by: Timeroot on January 08, 2010, 05:56:10 AM
Hmm, I tried this formula writing FractInt format:

Whirlwind {;Tglad
z = 0, c=pixel:
  z=z^(2^p1) + c*p1
   abs(z) <= p2
}

and animated it with ChaosPro. (p1 goes from 10 to .0375). I uploaded it at http://sites.google.com/site/timerootalex/Whirlwind.zip (sorry, I don't know how to add videos here)... but it seemed to act just like multibrots. Also, I didn't get that chirality you had - I'm not sure what changed/went wrong. Any ideas?


Title: Re: Mandelbrot whirlwind
Post by: Tglad on January 08, 2010, 10:12:08 AM
That is awesome Timeroot!
I think maybe the lack of symettry was a problem in my renderings rather than yours.
Did you take care to increase the iterations as p1 gets small (or perhaps that is automatic)?

The picture at the end of the video, that is it. That must be the resulting shape.
Sure it isn't a fractal, but I find it very interesting... it is the equivalent of a mandelbrot if you do the ^2 and the +c at the same time... or to put it another way, it is the attraction shape for a continuous version of the mandelbrot, where points follow curved paths rather than hopping from point to point.

I wonder if it is a shape that has been classified before in any other work, it would be interesting to see other fields that come across it.


Title: Re: Mandelbrot whirlwind
Post by: Timeroot on January 09, 2010, 04:29:57 AM
Yeah, I made sure to "up" the iterations. Also, the bailout value seems like it can be kept at 4 throughout the process; that sounds liked something worth proving: For all values of "j", the correct fractal will still be seen if the bailout value is not less than 4. Sadly, though, it really seems like it's the multibrot set; the only difference is that it doesn't "shrink" as the multibrot does as j->1, and the multibrot requires rapidly increasing bailout values and extremely high iterations. I would really like to know how you generated your 3D image; I feel quite confident I'm wrong  :tongue1: heheheh...

Anyway, the idea of it acting more like a continuous system rather than a map brought me to an idea: could this be transformed in a system of differential equations? Of course, if it is purely continuous, it would be solid. But with a timestep of reasonably large value, you could get something interesting. And it was awesome. This was the formula:

WhirlwindDynamic {;Dynamic system version of Whirlwind.
;p1 is timestep, corresponding to the exponent "j" in Whirlwind.
z=0, c=pixel:
  z=z+p1*(z*z - z + c)
   abs(z) <= p2
}

For this fractal, the bailout does need to be changed; for small j, it needs to be increased, for large j, it needs to be decreased. Also, as j changes, the size changes a lot. At j=2.5 (j=1 gives the regular mandelbrot), You have to zoom in by maybe a factor of 60 to get anything really visible; vice versa for j=0.5. Also, the minibrots had an interesting effect: rather than still looking like the whole, they begin to look like j in the opposite direction; for instance, at j=1.1, the main minibrot looks like the fractal at approximately 0.1. However, this isn't some simple mapping for these two values - the minibrot at j=2 doesn't correspond to any other values of j. Here's a picture of the minibrot at j=2:
(https://sites.google.com/site/timerootalex/Minibro-j%3D2.png) Oh, and one other observation: only at j=1 is it connected. That is, at every other value of j, there are "islands" of the set.

Finally, I tried some of the "alternating" formulas you suggested. I used this formula:

WhirlwindA2 {;Period-4 alternating between addition and exponentiation, like this:
;Add c, square & add c, square, square & add c, add c, etc. Doesn't use if-then logic.
z=0, c=pixel:
  z1=z+c
  z2=z*z+c
  z=z2*z2*z2*z2+c
    abs(z)<=p2
}

It also gave quite interesting results. The main fractal is quite ugly and glob-ish, but some features are very nice. It has parts that look quite similar to parts of the mandelbrot set, and in a generally agreeing relative position to one another. I was surprised to notice a true minibrot towards the left tip (surprise?), not similar to whole, but rather similar to the regular Mandelbrot. This set isn't locally connected, I should mention. Some parts looked like spirals from a Julia Set, logarithmic spiral dust. At other times, I found minimultibrots - Multibrots in just a very slightly skewed shape - but skewing is common in minibrots. Lastly, I found a minibrot that looked like the regular Mandelbrot, but had it's main bulb cut off the cupoid. I'll in include an image of it, scroll down...

Here's the whole "Alternating" fractal:
(https://sites.google.com/site/timerootalex/Alternating.png)
Here's a minibrot in it - not the largest, but the satellites make it quite beautiful, I think:
(https://sites.google.com/site/timerootalex/MinibrotAlt.png)
Here's a "bulbless" minibrot:
(https://sites.google.com/site/timerootalex/NoBulb.png)

P.S. - I changed the link in my previous post; for some reason I couldn't convert the file correctly, so I took the original (a fat 71 MB .avi file) and put it in a .zip - try watching now.


Title: Re: Mandelbrot whirlwind
Post by: Tglad on January 10, 2010, 12:56:27 AM
Ah, I see the problem, it is something I neglected. In performing the +jc I was doing this from step 1 (rather than step 0), which means that each Z starts at c (instead of jc). That is how the whirlwind was generated, and that is why what I was seeing wasn't the multibrot. So you images are correct, and although the j->0 image is still interesting, it is perhaps less so because any natural phemomenon that acted like this continuous mandelbrot would have an attraction set that was infinitely small, so the shape isn't likely to occur.
The +jc variation applied after step 0 is actually quite interesting to use as it can grow a mandelbrot (or mandelbulb) from a smooth disk/ball.

I like the images below, nice variations.


Title: Re: Mandelbrot whirlwind
Post by: Timeroot on January 12, 2010, 03:23:22 AM
Hmm, I tried this:

Whirlwind {
z=c=pixel, z=p1*c + z:
 z=z^(2^p1) + p1*c
  |z| <= p2
}

And although definitely being different from before, it still doesn't seem to be quite the same as your whirlwind. It looks a lot like the multibrot still, and it seems to have the same limiting "footprint". I have one question: Is that whirlwind actually a spiral, or does it have bilateral symmetry? Also, your wording confused me a bit in your last post, so I'm not quite sure what you did. Could you elaborate?


Title: Re: Mandelbrot whirlwind
Post by: Tglad on January 12, 2010, 09:02:55 AM
Hi Timeroot, I'm not up to speed with the chaospro format, not sure you need the z=p1*c+z, but the whilewind should be produced from this formulation:

initialise starting zs
Z(0) = C    (rather than starting with all Zs at 0)

Then
Z(n+1) = Z(n)^(2^j) + jC.

Despite its look it isn't actually a spiral (as you will see in the middle picture, which is front facing).
I erroneously thought the mandelbrot would tend toward a shape as j reduces (it becomes more continuous). It does tend toward a shape but that shapes size tends towards 0, which makes it less likely to be seen in nature.
But the general concept of scaling C by some value after the initialisation (Z(0)=C) is quite interesting. I'd like to see a movie of a mandelbrot slowly growing from a sphere (ie at Z(n)^8 + 0C).


Title: Re: Mandelbrot whirlwind
Post by: Timeroot on January 13, 2010, 02:46:58 AM
Okay, I see - so after one iteration, it's at c, instead of j*c. Makes sense. As far as I can tell, the "footprint" as you call it doesn't have zero size. The formula (when you start with z=0) is basically a multibrot with a somewhat scaled value of "c" - the j coefficient is really just has a dynamic zooming effect; zooming out when it's large, zooming in when it's small. Because of it, the footprint doesn't tend to and infinitely small size, and seems to be about .6 in area. I'm not sure, but it looks like it might just be a simple cardioid. It definitely does seem to not go to a limit of zero size. What do you mean, "growing" from a sphere? I'm assuming you mean some alteration of the mandelbulb... do you mean applying the same idea as the continuous function, but to triplex numbers? I'm not sure that they even have a function for any real exponent yet, so you may have to wait.


Title: Re: Mandelbrot whirlwind
Post by: Timeroot on January 13, 2010, 08:08:32 AM
Oh, and to back my case, here are two pictures. The first is with j=0.3, iterations=700, bailout=5000.
(http://www.fractalforums.com/3d-fractal-generation/mandelbrot-whirlwind/?action=dlattach;attach=1378;image)
Then, here it is with j=0.0015, iterations=10000, bailout=90000.
(http://hhttp://www.fractalforums.com/3d-fractal-generation/mandelbrot-whirlwind/?action=dlattach;attach=1380;image)
Clearly, the first is converging to the second. With that much difference in j, one would expect to see considerable difference if the limit was zero size...


Wait, the image don't seem to be working. How do you display them if you've only attached them? EDIT: Figured it out. :-D


Title: Re: Mandelbrot whirlwind
Post by: Timeroot on January 14, 2010, 03:17:54 AM
Jeez, this is the second time I've replied to myself, but I've done a bit more interesting stoof. Firstly, I created an overlay of the "Foot" with the regular mandelbrot, moving and scaling the mandelbrot so the two cardioids overlap. I've included the resulting image (pretty good agreement between the two cardioids, I think...)

Second, I tried a different version of your whirlwind formula; remember that, if z starts with 0, then the formula z->z^2 + 2*z*c + c^2 also produce the mandelbrot set; it's equivalent to adding c, and then squaring. So I tried a whirlwind-style modification of this: z->z^(2^j) + 2*z*j*c + a. "a" could be several things-things I tried were a=j*c, a=j*(c^2), a=(j*c)^2, a=j*(c^(2^j)), a=(j*c)^(2^j), and a=(j^2)*(c^(2^j)).

They all produce different results, and in general they are interesting. Some exhibit extreme sensitivity towards j; for a=j*(c^(2^j)), j=1 produces the mandelbrot, and 1.01 produces something completely different. Many go to a circle of zero size as j->infinity; some produce interesting results for negative j, some produce a black screen. Many of them "blow up" as j becomes very small. The two bulbous parts toward the right of the main cardioid often to interesting things, becoming almost circular or shooting out and coming back in as j changes. There are too many different phenomena to talk about/photograph... I recommend you try them all. ;-)

Oh, and strangely, a=(j*c)^2 and a=(j^2)*(c^(2^j)) seem to work the same... don't know why...


Title: Re: Mandelbrot whirlwind
Post by: Tglad on January 14, 2010, 05:54:11 AM
Sorry Timeroot I've been busy following some paths that have lead nowhere really.
Anyway, its cool to see it tends to a cardoid (or something close to it).
An interesting thing about this formula (when j->0) is that if you rotate Z by any angle each iteration, you end up with the same shape, at the same rotation... I think.

"What do you mean, "growing" from a sphere?"
I mean, if you take the usual mandelbulb Z^8 + C, and you initialise step 0 to Z=C, then if you animate the mandelbulb as Z^8 + kC as j goes from 0.1 up to 1, then you should get a smooth sphere-like mandelbulb growing into the usual one. Growing is the wrong word as the radius actually decreases, but with the right camera zoom it should look like the buds emerging.


Title: Re: Mandelbrot whirlwind
Post by: kram1032 on January 14, 2010, 05:59:06 PM
Very nice stuff :D

Actually, just guessing from Timeroot's vid, you could even use the zē+c formula and just by changing the parameter j to >1, you'd go through all the different n-grade Mandelbulbs, as far as I've seen... :)


Title: Re: Mandelbrot whirlwind
Post by: Timeroot on January 16, 2010, 07:41:01 AM
Okay, I finally learned how to write code for Ultra Fractal. You can find a pretty general group of formulas for the ones mentioned here under ahm.ufm.  :D Is it possible to make 3D fractals in Ultra Fractal?


Title: Re: Mandelbrot whirlwind
Post by: David Makin on January 16, 2010, 01:48:20 PM
Yes :)

Here's my currently released wip 3D formula (old-style ufm type):

http://www.fractalgallery.co.uk/MMFwip3D.zip (http://www.fractalgallery.co.uk/MMFwip3D.zip)

If you'd prefer to use UF 5's class based coding then check out Ron Barnett's ray-tracer formulas in the "reb.*" formulas/library.

I will be releasing an update to my wip 3D formula either today or tomorrow.

I should add that you can do (escape-time) 3D IFS too - see mmf4.ufm:3D IFS


Title: Re: Mandelbrot whirlwind
Post by: Timeroot on January 16, 2010, 05:21:07 PM
I'm sorry, I can't seem to get any of the 3D fractals to work. I tried the reb formulas and the mmf formulas, changing the color formulas appropriately. If it's 3D, I seem to always get either a blue, black, or transparent screen, with the exception of the reb "3D Fractal Raytrace". And I always let the image finish calcuating. ...help? :hmh:


Title: Re: Mandelbrot whirlwind
Post by: David Makin on January 16, 2010, 06:42:19 PM
I'm sorry, I can't seem to get any of the 3D fractals to work. I tried the reb formulas and the mmf formulas, changing the color formulas appropriately. If it's 3D, I seem to always get either a blue, black, or transparent screen, with the exception of the reb "3D Fractal Raytrace". And I always let the image finish calcuating. ...help? :hmh:

For my formula that I posted the link to then you shouild use mmf4.ucl:3D colouring direct as the *inside* colouring.
I'm not sure about Ron's formulas, I haven't used them for a while.


Title: Re: Mandelbrot whirlwind
Post by: Timeroot on January 17, 2010, 12:12:28 AM
Hmm, now it works. I hadn't even changed anything. ...were the "alien overlords" passing overheard before, disrupting my computer? Must've been. Hmph.

Anyway, I guess you can't create 3D fractals in UF very easily then? I guess that's one advantage ChaosPro has over UF: If you write out your formula in terms of quaternions, it can handle the 3D slicing and projection for you. Ah well. I tried looking through your WIP, but I could only make a toe of it. No head nor tail.  :(


Title: Re: Mandelbrot whirlwind
Post by: David Makin on January 17, 2010, 12:59:49 AM
Hmm, now it works. I hadn't even changed anything. ...were the "alien overlords" passing overheard before, disrupting my computer? Must've been. Hmph.

Anyway, I guess you can't create 3D fractals in UF very easily then? I guess that's one advantage ChaosPro has over UF: If you write out your formula in terms of quaternions, it can handle the 3D slicing and projection for you. Ah well. I tried looking through your WIP, but I could only make a toe of it. No head nor tail.  :(

My formulas aren't known for their ease of reading (including by me) - I have a strong tendency to optimise rather than write for clarity - including what doesn't really need optimising - also I tend to omit comments :)

Basically the global: sets up all the variables that are fixed for the entire render such as the view transformation, the light source array data etc.
Then the int: section is where the ray-tracing takes place.
The loop: section simply sends the required data to the colouring that's required to render the fractal.

UF gives you your 2D coords on a rectangle as #pixel and I basically use this rectangle as an image plane which is at a user specified distance from the user specified target and at user specified angles - the viewpoint being a user specified distance further from the target through the centre of the image plane.
So in the init: section the #pixel value is transformed to give our direction vector for the ray through the current pixel then we simply ray-trace from where this ray crosses the user specified front clipping plane.
The ray-tracing loop actually operates in up to 6 different states - calculate at current step on ray, calculate at current step+delta and calculate (at one step position only but maybe at step and at step+delta) for each of the 4 adjacent rays (for getting the normal at the found solid).

I hope that helps :)