bugman
|
 |
« Reply #300 on: October 10, 2009, 06:28:00 AM » |
|
There are lots of impressive renders in this thread.
Since I've been experimenting with MIIM (modified inverse iteration method) lately, I tried Paul's formulas for the roots of the quadratic triplex, to get the benefit of the extra detail. It didn't add much worthwhile. On the whole, I was disappointed with the various forms of the quadratic, and the higher powers look far more interesting.
Wow, Garth! I think your inverse Julia set is very impressive. Did you use Bounding Volume Hierarchies (BVH) to ray trace the image? How long did it take to render and what was the highest depth reached? It inspires me to investigate further. I think your MIIM greatly enhanced the image with some nice spirals. Do you have any recommendations where I can learn more about MIIM? I also created some experiments with higher order inverse methods, but they were very sparse and boring because I wasn't using MIIM (see image below). I think adding MIIM to these images will be utterly stunning.
|
|
« Last Edit: October 10, 2009, 06:59:00 AM by bugman »
|
Logged
|
|
|
|
David Makin
|
 |
« Reply #301 on: October 10, 2009, 12:56:04 PM » |
|
I already deleted my code for the inverse triplex, and I'm not planning to revisit it unless I can do something with the trigonometric version instead. I just looked at the formula Dave provided, and noticed that phi=atan((z/sqrt(x²+y²)). It should be cheaper to use phi=asin(z/r).
Very nice image Garth. With respect to the calculation, here's my actual UF code - I make use of UF's in-built atan2(value) where value is complex because I'm pretty sure this is faster than using atan(a/b) - note that mm and magn are initialised before entry into the iteration loop also that magno is used because I allow the option of using log(magn)/log(magno) for the divergence as an alternative to specifying a fixed value. magno = magn r = sqrt(magn)^@mpwr th = @mpwr*atan2(zri) ph = @mpwr*atan2(sqrt(mm)+flip(zj)) zri = r*(cos(th)*cos(ph) + flip(sin(th)*cos(ph))) + cri zj = -r*sin(ph) + cj magn = (mm=|zri|) + sqr(zj)
|
|
« Last Edit: October 10, 2009, 11:14:52 PM by David Makin »
|
Logged
|
|
|
|
xenodreambuie
|
 |
« Reply #302 on: October 10, 2009, 01:28:36 PM » |
|
Thanks, Paul! No, I coded it into a transform in XenoDream, to use the existing rendering (using a zbuffer as a surface for lighting.) It was mostly done in an hour at twice that size, but I left it overnight for only marginal improvement. If you check the recent thread about the Glynn Set, Dave posted some code from Peter Liepa for doing MIIM. (His website http://www.brainjam.ca/fractals.html has plenty of pics.) It uses contractivity to vary tree depth, which works incredibly well, although still not perfectly even distribution. However, I believe there is some mistake in the formula we used for the quadratic. I decided to try the trigonometric version instead, in order to use arbitrary powers. At first attempt only the theta was right (reducing to standard Julia set in XY). When I changed the formula to phi=acos(z/r), with x= rsin(theta)sin(phi), y=rcos(theta)sin(phi), z= rcos(phi), the correct roots appear for phi and the whole shape works as it should. That pic I did and the similar one of yours appear to be glitches and not reproducible with the correct formula. On the bright side, the quadratic produces a much nicer range of shapes and renders faster, and any power >1 or <-1 should work.
|
|
|
Logged
|
|
|
|
David Makin
|
 |
« Reply #303 on: October 10, 2009, 10:56:32 PM » |
|
Hi all, 6 images of the degree 2. Three of the White/Nylander (trig version) and three of the Rudy Rucker version: http://www.fractalforums.com/gallery/?su=user;cat=95;u=141Note that I had to fudge the code to render the inside Mandlebrots in the Rucker version correctly as the z (for the XY slice) and y (for the XZ slice) values kept gradually increasing due to error accumulation in the trig. Edit: Actually the black speckling around the edges of the inside in the White/Nylander slices is probably the same problem.
|
|
« Last Edit: October 10, 2009, 11:40:36 PM by David Makin »
|
Logged
|
|
|
|
David Makin
|
 |
« Reply #304 on: October 11, 2009, 02:00:20 AM » |
|
Finally got a render of the degree 4 White/Nylander Mandelbrot underway at 8000*8000, rendered using a wide field of view. Here's what the 800*800 version looks like rendered with the parameters set for the large render (i.e. the detail level is really too high for the 800*800 version): http://www.fractalforums.com/gallery/?sa=view;id=967The 800*800 version took just under 6 minutes on my core2duo laptop. In case anyone's interested the colouring is psedo-3D pseudo-perlin noise (or fBm if you prefer) using the sum of 3 2D fBm results i.e. fBm(x+flip(y))+fBm(y+flip(z))+fBm(z+flip(x)). Edit: larger version now here http://makinmagic.deviantart.com/art/Asteroid-National-Park-139905412Edit: Click image twice for full-size !
|
|
« Last Edit: October 01, 2011, 06:33:16 AM by David Makin »
|
Logged
|
|
|
|
xenodreambuie
|
 |
« Reply #305 on: October 11, 2009, 04:09:40 AM » |
|
Dave, that looks promising. Of course with inverse methods I can only do Julias.
On the formulas, the main reason for preferring atan2 over atan in general is to get a result in the right quadrant, so by default I use atan2 in actual code. If you use phi=asin(z/r) instead of atan, you should be able to save a sqrt, which must be cheaper, and should give identical results.
However, I'm curious as to what happens if you change to the standard spherical coords of phi=acos(z/r), z=rcos(phi), and sin(phi) in the x and y terms. This definition works for the inverse method, whereas the other doesn't (at least without some clever manipulation.)
|
|
|
Logged
|
|
|
|
David Makin
|
 |
« Reply #306 on: October 11, 2009, 02:13:31 PM » |
|
|
|
|
Logged
|
|
|
|
David Makin
|
 |
« Reply #307 on: October 12, 2009, 12:18:23 AM » |
|
Dave, that looks promising. Of course with inverse methods I can only do Julias.
On the formulas, the main reason for preferring atan2 over atan in general is to get a result in the right quadrant, so by default I use atan2 in actual code. If you use phi=asin(z/r) instead of atan, you should be able to save a sqrt, which must be cheaper, and should give identical results.
However, I'm curious as to what happens if you change to the standard spherical coords of phi=acos(z/r), z=rcos(phi), and sin(phi) in the x and y terms. This definition works for the inverse method, whereas the other doesn't (at least without some clever manipulation.)
Hi Garth, you are absolutely correct about the use of asin(z/r) instead of atan2(sqrt(x^2+y^2)+flip(z)) - it is identical and shaves just over 10% off the time on this P4HT by removing a square root from the iteration loop. As to your other idea, it's certainly produces an interesting Mandelbrot:   
|
|
|
Logged
|
|
|
|
|
David Makin
|
 |
« Reply #309 on: October 13, 2009, 04:41:41 AM » |
|
Hi, I think I found a new contender for the "true 3D" Mandelbrot. In this case I was contemplating (not for the first time) what would actually constitute a truly second level of "imaginary" for the j axis. Introduction of the i axis to the real number world depends on a new concept - the angle and rotation. Most methods of 3D+ visualisation depend on this and distance alone but we need something "other" that can only exist when a third dimension exists. I thought that maybe if we invent a function such that under multiplication by our third unit vector then both r and i are transformed to j we have something new and whole - since the production of itself depends on multiplication by itself and cannot be explained using existing 2D concepts (distance/angle) - also extending the same idea to 4D+ I came up with this multiplication table: r i j k r r i j k i i -r *j *k j j *j *r *k k k *k *k *r Where * in the above is + or - (potentially different in each case). Obviously this idea can be extended to any number of dimensions. Anyway after playing with the options for the 3D version I settled on this: r i j r r i j i i -r -j j j -j -r And here's the result for z^2+c:    Note that if we have zri (complex) and zj (real) then z^2+c is for example just: r = zj zj = 2.0*(real(zri)*zj - imag(zri)*zj) + cj zri = zri*zri - r*r + cri OK - I know, it's not exactly fully symmetrical but at least the 2 slices are the 2D Mandelbrot - and who said it should be symmetrical ?
|
|
« Last Edit: October 13, 2009, 03:13:47 PM by David Makin »
|
Logged
|
|
|
|
xenodreambuie
|
 |
« Reply #310 on: October 13, 2009, 06:21:46 AM » |
|
As to your other idea, it's certainly produces an interesting Mandelbrot:
Thanks Dave! That helps a lot. I suspected the phi=acos(z/r) version would have an asymmetric Mandelbrot in Z, as the Z constant has asymmetric behaviour in the Julias. It's now obvious that phi=asin(z/r) was chosen to get symmetry in the Z axis. Both are valid choices with different goals. Paul, I reimplemented your quadratic inverse formula and it's working correctly, so I take back any mention of glitches. (This time I just zeroed any negative arguments that appeared in sqrt functions, whereas previously I switched roots when that happened. That's what was giving me wrong results when the z constant was nonzero.) With phi=acos(z/r), the trig version has N independent roots in theta and phi for N*N total. For phi=asin(z/r), theta and phi don't have independent roots and I've given up trying to work out a solution. Anyone have any ideas? The quadratic Julia sets for each are quite different, and I'm rendering samples of each to post.
|
|
|
Logged
|
|
|
|
xenodreambuie
|
 |
« Reply #311 on: October 13, 2009, 10:07:04 AM » |
|
Here are six examples of quadratic Julia sets with a MIIM version of the Nylander/White formula for the triplex (z=rsin(phi) version.) They had 10-15 minutes rendering each at twice the size. 
|
|
|
Logged
|
|
|
|
David Makin
|
 |
« Reply #312 on: October 13, 2009, 12:11:34 PM » |
|
Here are six examples of quadratic Julia sets with a MIIM version of the Nylander/White formula for the triplex (z=rsin(phi) version.) They had 10-15 minutes rendering each at twice the size.
Nice !!
|
|
|
Logged
|
|
|
|
bugman
|
 |
« Reply #313 on: October 13, 2009, 07:45:42 PM » |
|
Thanks, Paul! No, I coded it into a transform in XenoDream, to use the existing rendering (using a zbuffer as a surface for lighting.) It was mostly done in an hour at twice that size, but I left it overnight for only marginal improvement. If you check the recent thread about the Glynn Set, Dave posted some code from Peter Liepa for doing MIIM. (His website http://www.brainjam.ca/fractals.html has plenty of pics.) It uses contractivity to vary tree depth, which works incredibly well, although still not perfectly even distribution. However, I believe there is some mistake in the formula we used for the quadratic. I decided to try the trigonometric version instead, in order to use arbitrary powers. At first attempt only the theta was right (reducing to standard Julia set in XY). When I changed the formula to phi=acos(z/r), with x= rsin(theta)sin(phi), y=rcos(theta)sin(phi), z= rcos(phi), the correct roots appear for phi and the whole shape works as it should. That pic I did and the similar one of yours appear to be glitches and not reproducible with the correct formula. On the bright side, the quadratic produces a much nicer range of shapes and renders faster, and any power >1 or <-1 should work. All I found was this but it says nothing about MIIM: http://www.fractalforums.com/programming/mathematical-formula-for-fractal-tree/
|
|
|
Logged
|
|
|
|
bugman
|
 |
« Reply #314 on: October 13, 2009, 07:52:58 PM » |
|
Anyway after playing with the options for the 3D version I settled on this:
r i j r r i j i i -r -j j j -j -r
What is this table called and how do I find the squaring function from this table?
|
|
|
Logged
|
|
|
|
|