The magic begins when we configure two or more nonoverlapping sets of paired disks in the complex plane. Under repeated mappings, disks proliferate into beautiful fractal forms. Such an arrangement of disks and transformations is known as Schottky dynamics in honor of Frederich Schottky who explored the underlying mathematics in the late 1800s.1
Here we work with two sets of paired disks: The disks and are paired by the transformation , and the disks and are paired by the transformation . These are depicted in the following figure.2
In the following program, the two transformations and and their inverses, and , are iteratively applied to the four seed disks up to nbrLevels many levels.
Here’s one way to understand what’s going on. Set nbrLevels to 0, model to ‘disks’, and color model to ‘by disk’. This assigns a random color to each of the four seed disks. Keep pressing the Randomize button until these four colors are quite distinct. Next set nbrLevels to 1, and let’s call any one of the seed disks . Because the disks and are paired, the transformation maps the outside of to the inside of . There are three seed disks that lie outside : , , and . Applying to each of these produces a new disk of the same color inside . Increase nbrLevels from 1 to 2 and the process repeats. Each level 1 disk residing inside maps three seed disks to even smaller disks in its interior. Since was chosen arbitrarily, the same process occurs in each of the seed disks.
Let’s look a bit more closely. Every disk represents a composition of the four transformations , , , and . This is indicated by the subscript in the disk’s name. For example, the seed disk represents the transformation . Apply to seed disk and we get the (smaller) disk contained in . In turn, disk represents the transformation . Applying to the seed disk yields a new (even smaller) disk nested inside . In general, applying the composite transformation to three seed disks yields three smaller disks nesting inside disk . And why do we apply to three rather than to all four seed disks? Consider, for example, the disk . If we were to apply this to the seed disk we obtain . But since and are inverses, is another name for , and our goal is to produce lower-level nested disks, not to backtrack. So the three disks nested in one level lower are , , and .3
When model is set to ‘disks’, the disks at every level are rendered. When model is ‘spheres’, disks are represented by spheres, but only those spheres at level nbrLevels get rendered.
As we’ve seen, setting color model to ‘by disk’ assigns a color to each of the four seed disks and propagates these colors to higher levels: a disk’s color is that of the seed disk from which it was transformed. Setting color model to ‘by level’ assigns a random color to each level.