A natural way of defining which part of an embedded Julia set you want to zoom to is by using wakes.
A hyperbolic component is a disc-like or cardioid-like region of the Mandelbrot set. Each hyperbolic component has a nucleus where the orbit of 0 returns to 0 after p iterations, p is called its period. There is a bidirectional mapping between the exterior of the Mandelbrot set and the exterior of the unit disc, external rays are the images under this mapping of straight lines from the unit disc to infinity (that would also pass through the origin if extended). Each external ray has a corresponding external angle, which is the counterclockwise angle the straight line makes with the positive real axis. The external angle is usually measured in turns (1 is the whole circle), and expressing it as a binary expansion shows interesting properties.
Rational angle's rays land on the boundary of the Mandelbrot set. Each hyperbolic component has 2 rays landing on its root. (The period 1 cardioid can be taken to have rays at angles 0 and 1, all other rays have angles strictly between 0 and 1.) The binary expansion of these rays is periodic with the same period as the period of the hyperbolic component's nucleus. A wake is defined by the pair of external rays landing on the root of a hyperbolic component - the complex plane is divided into two parts, one containing the origin, and the other containing the hyperbolic component. The part containing the hyperbolic component is the wake.
In an embedded Julia set there is one nucleus of the next higher (in increments of the parent island's period) period either side of the wake - one further out towards the tips, the other further in towards the origin (and thus the main body of the Mandelbrot set). The attached images illustrate this, I verified that this binary division property holds for two embedded Julias.
This isn't quite the whole story though: here out really means going beyond the tip of the antenna of the minibrot. When zooming in (the blue image attached) to 4-fold symmetry (in the middle of this embedded Julia set) you can also go left and right. An elegant way of handling this is via internal angles: right turns out to be in the wake of the period 3P bulb at 1/3, and left the period 3P bulb at 2/3 of a period P cardioid. So out could be renamed "1/2", and this can be formalized to give angled internal addresses, see this paper: https://arxiv.org/abs/math/9411238 The only wart is that "in" isn't used in angled internal addresses, so they can sometimes end up with a somewhat unintuitive formulation: 1 1/2 2 1/2 3 1/2 4 out would be 1 1/2 2 1/2 3 1/2 4 1/2 5, but 1 1/2 2 1/2 3 1/2 4 in would be 1 1/2 2 1/2 3 1/2 5.
first step: ?
This short program succesfully navigates from the center of an embedded Julia set to a nucleus 2 spirals out in the direction you would take to make a tree.
Unfortunately I think the structures at the next level of zooming are too symmetrical (in terms of periods and preperiods), I don't know if it will be possible to continue automating this further.
An example showing the "symmetry trap" in morphed Julias: the symmetry means that Newton's method can't be used because the (fractal) boundary of basins of attraction (not shown) will pass through the p314 nucleus at the center, so it could converge to anywhere or not at all. The symmetry can be broken at the minibrot (tracing internal rays to 1/3 or 2/3 bulb), but this doesn't help much because it isn't far enough out from the nucleus to make a difference.
It seems the "symmetry breaking" of Misiurewicz spirals preperiod does happen only at the ends of the branches of the tree, rather than at the middle as we'd hope for. There are 6 p631 nuclei near the center (second image), to continue tree morphing we want to find one of the 2 nearest the p314 nucleus at the core (at which point we can go further out alternating Misiurewicz centers and periodic centers).
This means it should be possible to estimate the atom domain coordinate of the next in the series: it should be approximately 2^(3/2 * log2(1.8763e-06)) = pow(1.8763e-06, 1.5) = 2.5701e-09.
There should be a period 2746 * 2 + 3 * 2 = 5498 nucleus at atom domain coordinate 2.5701e-09 + 0 i in the (2746 / 1370) atom domain of the period 2746 nucleus.
Final step (my next task for tonight) will be implementing a Newton's method iteration to go from atom domain coordinate to parameter plane coordinate, if this is possible then automated Julia morphing in O(period) may be possible after all! (recall that automated Julia morphing in O(period^2) is possible by calculating with patterns of external angles in binary notation, then tracing external rays, but this is too slow to be practical).
UPDATE I've now implemented it, but it doesn't work completely as intended - the first nucleus is found correctly from the atom coordinate guess, but then the Misiurewicz step to find the neighbouring spiral shoots off into nowhere-land (and it's actually reached a 5495p1 instead of the desired 5496p3 ) See attached...
UPDATE 2 I've got it working, at least in one test - the key was remembering that there is a Misiurewicz point at the tip of the embedded Julia set, and this particular one has much lower preperiod so its basin of attraction is much bigger. The path for the success image was period 2746 nucleus -> atom domain coordinate guess -> 5454p3 Misiurewicz point -> period 5498 nucleus (the desired location). Next step is investigating the patterns of (pre)periods for the required tip Misiurewicz points at each level of Julia morphing.
Here is a parameter file for m-perturbator-gtk (all the "1000" specify the bits of precision required to load the long numbers). In the attached image I deleted a couple of annotations because they were overlapping.
Then m-perturbator-gtk (patched with a high iteration count, need to make it runtime adjustable..) took 20 minutes of wall clock time (80mins of CPU time on my quad core) to generate the attached image.
Success is reported, some hopefully minor cleanups needed to help get the first morphing level correct without hard-coded coordinates, plus some restructuring of library code to use less memory (recomputation will most likely be cheaper than caching, and make high iterations/precisions possible - I couldn't go to level 14 without running out of RAM+SWAP).
Astounding! I will need to study some more before I can understand all you did.
Can you post the final location of the trees for study purposes?
Can you explain the meaning of the "atom domain coordinates"? p is the lowest iteration where |z_n| has the smallest minimum, and q where it has the one-but-smallest minimum and a=z_p/z_q. I understand the significance of p, but not the q and a.
I find using p(center) with this method and then finding location with Newton to get the reference orbit is almost as good as using the box method.
Yes, it works fine in many cases, but when "passing by" Julia sets towards the outer filaments, for example,. the box period can find the next deeper center before the atom domain period does (the atom domain may be smaller than a pixel for quite some time).
Thanks, your blog post is very clear.
Here's a zoom movie of the computer generated tree-zoom.