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

*i*Depth: 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

*p*th 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*!