This one binary searches for the surface of each component from its nucleus to far exterior in the direction of the target point. Finding the distance estimate in this solution is easy (just `length(point - nucleus) - length(surface - nucleus)`).
Finding the surface normal is harder: for circle-like components that become sphere-like the binary search ray direction is a close approximation, but cardioids are not sphere-like. One tangent is `i d/dz` at the boundary, but in the wrong frame...
Distance estimates for height fields only work if the height field is well-behaved (eg: height is a constant factor times 2D exterior distance estimate of Mandelbrot set) so you can bound the distance to the surface from a point by a constant factor times the vertical distance from the surface.
My desired height field for interior as solid balls is not well-behaved (in fact the magnitude of the gradient tends to infinity at the boundaries), so the height field approach is doomed to fail.
english ambiguity Show more
I saw headline: "Hundreds of buffaloes drown 'fleeing lions' in Botswana"
My brain misinterpreted it as buffalo causing lions (which were fleeing from the buffallo) to drown.
Pretty much the opposite of what happened!
Atom domain coordinates can be calculated to construct a height field too, but I think a "distance estimate to nearest atom domain boundary" algorithm will work out to be an O(N^2), where N is the maximum iteration count, because you need to check all the other periods for each period.
The interior is easier because all the components are disjoint (except at single points). Atom domains overlap.
So it remains a concept for now, too hard for me...
The height of the interior components could be computed using the size estimate for the atom and the interior coordinate (multiplier map). Maybe |size| sqrt(1-|d/dz|^2)?
A distance estimate for this height field could be found for disc-like components by assuming the nearest point on the surface of the component is on the ray to the nucleus of the component, not sure how it would work for cardioid-like components...
Concept for Mandelbrot set render in 3D:
Interior disc-like hyperbolic components are made 3D sphere-like balls, cardioid-like also made 3D in a similar way. Use a transparent material like glass.
Atom domain boundaries outside the Mandelbrot set (mostly circle-like) are made into 3D sphere-like balls using a thin-film soap bubble material.
The opaque ground plane intersects the structure, and is coloured in a monochrome fractal checkerboard pattern using bitwise XOR of X and Y coordinates.
https://youtu.be/TtqPkpRAyH8 thanks google for the autogenerated portuguese subtitles
https://mathr.co.uk/mandelbrot/mu-unit/#per2 got mu-unit renormalization working, the idea (reverse engineered from the code) I used from Mandel was to use 2 divided by the derivative w.r.t. z of the superstable periodic cycle (excluding the critical point z_crit = 0) as an escape radius for |f^p(z)-z_crit|.
The implementation of Mandel is a bit messy with loads of magic values (eg code does something completely different if one parameter is 65001u vs 65003u). Not many comments either.
http://mndynamics.com/indexp.html Mandel by Wolf Jung can do proper renormalization
will dig into its source code (GPL) soon
I implemented the attached with
http://mndynamics.com/papers/bedlewo14a.pdf 3a multiplier map for hyperbolic components (page 15)
Later I will try to figure out 3b so I can also highlight the filaments that are owned by the mu-units.
Later still I'll try to use wakes to select one specific mu-unit, probably will try to highlight limbs first.
see also: https://mrob.com/pub/muency/muunit.html (but I replicated the method behind this one (afaict, something to do with mapping the multiplier to the period 1 cardioid even outside the interior of the mu-unit's owning hyperbolic component) and the distortion of features is too great - there are halos around discs where the supposed mu-unit does not align with the true #Mandelbrot set shape).
refactored my bifurcation diagram (aka orbit diagram) generator to invoke ffmpeg itself, thus adding the ability to encode multiple segments for later seamless repetition to desired length. it's not true "infinite zoom", but a visually indistinguishable fake, and that's good enough for me.
also made it use the z:=z^2+c form, as the distortion of the x:=ax(1-x) form at low zoom levels was annoying me a lot.
these 3 videos rendered in 9mins at 640x360p25 with a density (average number of samples plotted per output pixel) of 1000. I have zoom outs too, and another set of 6 videos zooming to the period 3x island in antenna of period 3x island in antenna of ... limit point are still being rendered.
@hamptonio Oh! I found my code, and turns out I already ported it to WebGL (runs 60fps full screen realtime on my system but I have a beefy GPU..).
drag with left-mouse-button pressed to add a new root (the path is recorded and animated, but there is no visual feedback in the process, and you need 2 or 3 paths to get something interesting...).
http://code.mathr.co.uk/fractaloids for source/history browser
@hamptonio I made it roughly 2x faster (in Firefox 62 on Debian Buster) by avoiding memory allocation by [...] inside the loop: https://mathr.co.uk/tmp/Newton%27s%20method%20for%20a%20cubic.html
here's one of my experiments from 2012 with GLSL fragment shader (using desktop OpenGL, not WebGL)
https://archive.org/details/ClaudiusMaximus_-_Fractal_Juggling_v0_3 I think it ran in realtime, but it's so long ago that I forgot...
Looping animation made by sequencing key frames in the bifurcation diagram of the logistic map x := a x (1 - x), which is conjugate to the Mandelbrot set's quadratic polynomial x := x^2 + c.
The left hand edge of each keyframe is the parabolic root of a hyperbolic component (using jargon related to the Mandelbrot set). This can be found by Newton's method in 2 variables, starting from a nucleus of the relevant period (the animation starts 1, 2, 4, 8). The nucleus can be found by Newton's method in 1 variable, starting from a guess coordinate found by tracing external rays.
The right hand edge of each keyframe is a tuned / renormalized copy of the tip of the Mandelbrot antenna (c = -2 or a = 4). I found these coordinates by tracing external rays in the Mandelbrot set and then mapping c to a.
The top and bottom edges of the keyframes were found by iterating at the right hand edge and finding the two x that are closest (but not equal to) the starting point (the critical point x = 0.5). I think (not sure) these are at iteration numbers P and 2P, where P is the period of the "owning" hyperbolic component.
Interpolation between keyframes was done using Poincaré half-plane geodesics: