A quadratic Julia set with the finite attractor a 10-cycle. Its basin has been shaded by both smoothed iterations (hue) and smooth angular-decomposition (brightness). The basin of attraction of infinity is solid black.
The long calculation time is a result of aggressive antialiasing.
Freely redistributable and usable subject to the Creative Commons Attribution license, version 3.0.
Detailed statistics:
Name: Dragon II
Date: February 9, 2009
Fractal: Julia set
Location:
c = 0.329985 + 0.055796
iDepth: Very Shallow
Min Iterations: 1
Max Iterations: 80
Layers: 2
Anti-aliasing: 3x3, threshold 0.0, depth 2
Preparation time: 10 minutes
Calculation time: 2 hours (2GHz dual-core Athlon XP)
Technical notes:
A quantity
phi can be calculated for each point in the basin of attraction of a non-superattracting point that has the property that it varies continuously on the unit circle, has winding number 1 about each point belonging to the attractor, is invariant under the mapping, and in a neighborhood of a point belonging to the attractor it does not vary with distance from that point and its rate of change with angle to that point is 1.
The actual calculation of
phi, which is unique up to a fixed rotation, is slightly trickier. The method used here was to iterate a point until it landed in a small target disk containing, and approximately centered on, a chosen point belonging to the attractor, note the first point within that disk hit, iterate it some more, and note the second point within that disk hit. These two points spiral into the attractor:
Ignore point 5; points 3 and 4 are the interesting ones this time. The line joining the target X (near the attractor) to 3 is at an angle,
theta. If we color an image based on this angle, we get a smooth continuous band of color in each iteration band, wrapping around the gradient once as one completes a circuit of this band, but discontinuous at the edges of the iteration bands.
My construction of
phi from
theta is similar to my construction of a smoothed iteration function on similar attractors, but rather simpler. The discontinuities at the edges of the iteration bands need to go away, and they result from the angle to the attractor changing with each iteration. The amount of this change, which is the angle 3X4 (the angle turned at X if you go from 3 straight to X, then from X straight to 4), is roughly constant for a given attracting basin, so simply subtracting this angle multiplied by the number of iterations from
theta yields a continuous function approximating
phi for period-1 attractors.
Higher-period attractors add the usual complication, which is that we have to consider only every
pth iteration where
p is the period of the attractor. This applies both to determining the points whose angles to the attractor are used and to determining the number to multiply with the angle-change-per-iteration -- it is the floor of the number of iterations divided by the period of the attractor, in general.
The approximation to
phi becomes "good enough" for a disk radius of around 1x10
-20 for many Julia sets. For
Dragon II, 1x10
-26 was used. The same value was used for the periodicity-detection sensitivity, which affects how close X is to the actual attractor.
A related technique computes the internal angle of a point inside the Mandelbrot set, or in its analogues in the parameter spaces of other maps. The angle 3X4 differs from the internal angle by exactly pi. (To see this, note that points just move straight towards the attractor for parameter values of internal angle 0, while 3X4 will be pi since 3, 4, and X then lie in that order along a line. For parameter values of internal angle pi, points bounce across the attractor, so 3, X, and 4 lie in that order along a straight line and 3X4 will be zero. A coloring of M interior points by internal angle using this method of calculating it has been tested, and works. The bent "spine" of the distorted minibrot where a seahorse tail joins its body has been visualized using this technique to draw it in white on a black background; the cardioid's rays of internal angles zero and pi form a noticeably curved arc in this minibrot.)
For parameter-space images of maps with multiple critical points, calculating both the internal angle and
phi and adding them generates an interesting coloring. When the critical point being studied is bifurcating, one gets regular Mandelbrot buds and cardioids with internal angle coloring, modified by various rotations of the gradient in each bud or cardioid. In areas where that critical point is not bifurcating but does sometimes go to an attractor resulting from another one bifurcating, one gets chunks of connected-Julia-set-like structures in the image, and these get colored by
phi coloring, but the gradient is influenced by the internal angle within the "ghost bud" that would be visible if the other critical point were used to generate the image. (Coloring simply by
phi is less attractive because
phi completes two full rotations as one circles a component center, while internal angle completes only one, giving each internal angle a unique hue, and the sum of internal angle and
phi also completes only one full rotation, since
phi and internal angle (for some reason) seem to rotate in opposite directions.)
A further complication that arises is that the choice of target attractor member needs to be stabilized somehow, or one can get discontinuities and even horrible moire artifacts in areas where two members of a cyclic attractor compete to grab the critical point first, and as the parameter varies the critical point hits a radius-
epsilon disk about one attractor point first, then another, then the first again but after one more iteration, etc.; this, and related artifacting in smoothed iterations in Mandelbrot component interiors, can be avoided by changing the attractor point selection from "first point where periodicity-detection trips" to "closest member of the attractor to the origin" or similarly. (Easily done: first, find an arbitrary point in the attractor using "first point where periodicity-detection trips", then advance further until a tiny disk about that point is hit again. Now you know the period. Advance that many iterations again and take the point of minimum modulus from those iterates. This method has been tested, and it worked to get rid of artifacting, of the kind described, that had been plaguing my test images.) (This de-artifacting trick is also useful for Julia sets, to make the
phi coloring stable under perturbations of the Julia seed. This can become important in creating, say, parameter-morphing animations. In fact, it was observing the
phi coloring jump discontinuously as a parameter was continuously varied that finally helped diagnose the cause of that *@%! artifacting in those test images.) (On a related note, a canonical
phi phase angle can be chosen by requiring
phi to be zero at a chosen critical point contained in the attracting basin being
phi-colored. This can be done by iterating that critical point first, which one should do anyway for Julia set images to discover the attractors and their periods and other properties, and seeing what raw
phi is computed using the method described above. Save this value as the phase-shift, and when coloring points, calculate
phi in the same way and then subtract the phase-shift. The phase shift being constant for that image, this will obviously be another valid
phi coloring, and equally obviously, the value of this phase-shifted
phi at the chosen critical point will be zero. This stabilizes the
phi coloring even further as the parameters vary. On Mandelbrot images, though, it forces
phi to zero throughout the image! Using one critical point to normalize
phi and a different one to actually generate the image will normalize
phi in the connected-Julia-set-like chunks in the image, however. If
phi normalization for a particular component is always done using the bifurcating critical point, then angle-sum coloring will color by internal angle for components "owned by" the image critical point and by
phi for the Julia-like chunks within the "ghost components" "owned by" other critical points. On the other hand, determining which critical point "owns" a component is nontrivial, and the answer is not always even well-defined; two critical points can sometimes smoothly switch roles.)
Parameter-space images with these kinds of colorings will be (eventually) forthcoming. Meanwhile, enjoy
Dragon II!