Apollonian Marble

Home • Gallery • Tutorials • Download • Purchase • Site Map
 

Apollonian Marble Examples

Fractal: Apollonian Marble

Apollonian Marble 12

Fractal: Apollonian Marble

Apollonian Marble 13

Fractal: Apollonian Marble

Apollonian Marble 14

Fractal: Apollonian Marble

Apollonian Marble 15

Fractal: Apollonian Marble

Apollonian Marble 19

Fractal: Apollonian Marble

Apollonian Marble 20

Fractal: Apollonian Marble

Apollonian Marble 22

Fractal: Apollonian Marble

Apollonian Marble 23

Fractal: Apollonian Marble

Apollonian Marble 24

Fractal: Apollonian Marble

Apollonian Marble 28

Fractal: Apollonian Marble

Apollonian Marble 29

Fractal: Apollonian Marble

Apollonian Marble 30

Fractal: Apollonian Marble

Apollonian Marble 32

   

The Apollonian Marble examples are based on an Orbit Trap called the Apollonian Gasket. The Apollonian Gasket is a stand-alone fractal. It is implemented as an Orbit Trap so it can take advantage of Orbit Trap related features in the Fractal Science Kit, but it does not need the normal orbit processing; i.e., I set the Max Dwell property found in the Orbit Trap Orbit Generation section on the Mandelbrot / Julia / Newton page, to 1, eliminating the normal orbit processing.

The examples are composed of 2 orbit traps: the Apollonian Gasket orbit trap (a set of disks that fill the unit circle), and a Circle orbit trap that borders the unit circle. I use a circle inversion transformation to reflect the inside of the unit circle to the outside of the circle, and thereby fill the complex plane. Then I apply 1 or more Transformations to alter the image. You can create lots of variations by changing the Transformations applied to the fractal.

Each disk in the apollonian gasket has an associated index value based on how the disk was formed. I use this index value to determine how to color the disk. This is described in detail below.

The Apollonian Marble examples were inspired by information found on the Fractal Geometry site. Additional information can be found in the excellent book Indra's Pearls - The Vision of Felix Klein by David Mumford, Caroline Series, and David Wright.

Performance

The Apollonian Marble examples are based on an Orbit Trap called Apollonian Gasket. There are a few properties associated with the trap that are related to quality and also affect performance. When you are exploring, you can improve performance by adjusting these properties on the trap's properties page.

Open the orbit trap's properties page:

General
    Mandelbrot / Julia / Newton
        Orbit Trap
            Orbit Trap Map
                Instructions: Apollonian Gasket
                    Properties

Depth, Radius Cutoff, and Min Radius, control the number of circles that are generated to define the fractal. Depth is the depth of recursion used in the algorithm. Radius Cutoff is the minimum radius of circles placed on the processing stack and is used to terminate the recursion loop early on selected branches. Min Radius is the minimum radius required for a circle to be displayed.

You can increase Depth and/or decrease Radius Cutoff or Min Radius to fill in the gaps between circles but these changes can cause dramatic increases in processing time. If you make a change that seems to be taking forever, you should click the Cancel Display command on the Tools menu of the Fractal Window to terminate the processing. Then try adjusting these properties to reduce the processing (i.e., decrease Depth and/or increase Radius Cutoff or Min Radius).

When you are exploring, you should set Depth to 32, Radius Cutoff to 0.004, and Min Radius to 0.004. This will greatly improve performance at the expense of quality. You can reset them later when you find an image you wish to save.

Zoom In/Out

Zoom In or Zoom Out to examine different parts of the fractal.

Execute the Home command on the View menu of the Fractal Window to reset the fractal to the default position/magnification, and then Zoom In to other areas.

Change the Transformation

You can apply a transformation to the fractal.

The examples all have 2 transformations: Composite Function and Circle Inversion (Conditional). The Circle Inversion (Conditional) maps the inside of the circle that bounds the Apollonian Gasket to the outside of the circle, thereby filling the complex plane. It is important that the Circle Inversion (Conditional) transformation remain at the bottom of the list of transformations as you play with changing the transformations as described in this section.

Execute the Home command on the View menu of the Fractal Window to reset the fractal to the default position/magnification before you adjust the transformation. Then change the transformation and Zoom In to interesting areas of the transformed image.

To change the transformation applied to each orbit point prior to passing it to the orbit trap, select the transformation's properties page:

General
    Mandelbrot / Julia / Newton
        Orbit Trap
            Transformation 1
                Composite Function
                    Properties

Set the F(z) property to one of the complex functions in the list. You can change some of the other properties on this page for more variations.

You can also use a different transformation altogether. Select the Composite Function page, and change the Based On property to select a transformation and then open the transformation's properties page (found under the transformation in the page hierarchy), and play with the transformation's properties. See Transformation Support for details.

To add additional transformations, select Transformation 1:

General
    Mandelbrot / Julia / Newton
        Orbit Trap
            Transformation 1

Click the New toolbar button to add a new Identity transformation to the bottom of the list, and then click the Move Up toolbar button to move the new transformation above the Circle Inversion (Conditional) transformation. Normally, I move the new transformation to the top of the list, but it can be placed anywhere above the Circle Inversion (Conditional) transformation. See Transformation Array for details.

Then select the Identity transformation:

General
    Mandelbrot / Julia / Newton
        Orbit Trap
            Transformation 1
                Identity

Change the Based On property to select a transformation and then open the transformation's properties page (found under the transformation in the page hierarchy), and play with the transformation's properties. See Transformation Support for details.

Change the Apollonian Gasket Orbit Trap Properties

Open the Apollonian Gasket Orbit Trap properties page:

General
    Mandelbrot / Julia / Newton
        Orbit Trap
            Orbit Trap Map
                Instructions: Apollonian Gasket
                    Properties

The Apollonian Gasket Orbit Trap can be changed in many different ways but only some of these changes will work with these examples.

Depth, Radius Cutoff, and Min Radius, control the number of circles that are generated to define the fractal and were discussed above in the Performance section.

The other properties that you can change are: Layout, N, UCG Transform, and Angle.

Layout controls the method used to generate the disks in the gasket. It has 6 possible values but only 3 of them work with these examples. You can change Layout to 1 of the following values:

  • 1 ring of N tangent circles plus unit circle
  • 2 rings of N tangent circles
  • 2 rings of N tangent circles plus unit circle

The other choices include a border circle and generate parts of the gasket outside the unit circle and are not compatible with our examples. You can experiment with these other choices outside the context of the Apollonian Marble examples.

N controls the order of symmetry. Our examples use N equal to 6 which generates a gasket with 6-way symmetry.

UCG Transform can be checked to pull the circles off center. You can use UCG Point and UCG Angle to control the effect. UCG Point is a point in the unit circle and increases the effect as you move away from the origin toward the border of the unit circle. Note that you may need to increase Max Radius if your changes increase the size of any of the disks beyond the value of Max Radius. You can reset Max Radius to 1 to be sure to display all the disks.

Angle simply rotates the Apollonian Gasket Orbit Trap about the origin.

The properties Layout and N will affect the number and placement of the disks that are generated, and will require corresponding changes in the color controllers. As described in the comment section of the Apollonian Gasket Orbit Trap, the range of the index values associated with the disks is:

0 <= Index < K

The value of K in the above expression depends on Layout and N as shown below.

Layout K
1 ring of N tangent circles plus unit circle N + 1
2 rings of N tangent circles N*2 + 2
2 rings of N tangent circles plus unit circle N*3 + 1

All the examples use Layout equal to 2 rings of N tangent circles and N equal to 6, so K equals 14 (N*2+2), and the trap index ranges from 0 to 13. The range of index values is printed to the Error/Debug Window so you can generate the fractal and then open the Error/Debug Window to get the range you will need when setting up your color controller as described in the next section.

One final note, when you change Layout and/or N, you will need to adjust the Trap Index Offset associated with the Circle orbit trap used for the border of the gasket.

Open the Orbit Trap Map properties page:

General
    Mandelbrot / Julia / Newton
        Orbit Trap
            Orbit Trap Map

Select the Circle orbit trap in the list of traps and change the Trap Index Offset to K from above. Note that it is set to 14 for all the examples.

The Trap Index Offset changes the Circle trap's index (normally 0) to 14. This allows you to control the color of the border circle in your color controller.

Play with Color

Each disk in the apollonian gasket has an associated index value based on how the disk was formed. I use this index value to determine how to color the disk.

Note that when deciding on how to map each disk to a color, you need to know what the index value is for each of the disks, since the index is used to map the disk to a specific color. To this end, you can open the Information Window, and click on a disk in the Fractal Window to display the disk's index value (along with lots of other data). The disk's index is given by the Trap Index field.

The examples use the Index Map Orbit Trap Master Controller to map the trap's index value to a color controller to color the trap. The trap index for the examples, ranges from 0 to 14, for a total of 15 index values. The first 14 are associated with the gasket's disks, and the last (index 14), is associated with the border circle around the gasket. See the section above for details on the index mapping. The index values are mapped to 1 of 4 color controllers.

The master controller maps each index to 1 of the 4 Orbit Trap Controllers used by the examples to color the orbit trap. The table below gives the mapping.

Index Controller
0 0
1 0
2 0
3 0
4 0
5 0
6 1
7 1
8 1
9 1
10 1
11 1
12 2
13 0
14 3

You can view the mapping by selecting the master controller's Index/Controller Map properties page:

General
    Mandelbrot / Julia / Newton
        Orbit Trap
            Controllers
                Master Controller: Index Map
                    Index/Controller Map

Each of the 4 color controllers are called Pattern Map - Perlin Noise. These controllers use the gradient and the controller settings to define the color/appearance of the trap. Controller 0 is used to display the white disks, controller 1 is used for the green disks, controller 2 is used for the blue disks, and controller 3 is used for the border circle.

If you change the gasket's properties in a way that changes the range of index values, you will need to change the mapping to account for the new range of index values. You can modify the mapping in the Index Map Orbit Trap Master Controller to handle the new range and map the new disks to one of the controllers 0, 1, or 2, and map the border to controller 3.

Optionally, you can add additional Pattern Map - Perlin Noise controllers to the list of controllers and map some of the index values to the new controllers using the Index/Controller Map properties page.

Finally, you can use a different controller or set of controllers altogether.

For example, the following instructions can be used to change one of the examples to use a single color controller.

Starting with one of the examples, select the Orbit Trap Master Controller page:

General
    Mandelbrot / Julia / Newton
        Orbit Trap
            Controllers
                Master Controller: Index Map

Change the Based On property to Pass Thru.

Select the Controllers page:

General
    Mandelbrot / Julia / Newton
        Orbit Trap
            Controllers

Select all of the controllers in the list of controllers, and click the Delete toolbar button to delete them. This should leave you with the single controller, Gradient Map - Value.

Select the Gradient Map - Value controller:

General
    Mandelbrot / Julia / Newton
        Orbit Trap
            Controllers
                Gradient Map - Value

Change the Based On property to Color Map - Dwell/Index.

Select the Color Map - Dwell/Index controller's properties page:

General
    Mandelbrot / Julia / Newton
        Orbit Trap
            Controllers
                Color Map - Dwell/Index
                    Properties

Change the Index Map property to Trap Index to use the trap's index to determine which color to use.

Change the Count to 15 (because the range of index values for the examples is 15).

Click on the Colors property to set the colors using the Color Selection Dialog.

Now display the fractal to see your results.

 

Copyright © 2004-2019 Ross Hilbert
All rights reserved