# Hyperbolic Pattern Examples

 Hyperbolic Pattern 06 Hyperbolic Pattern 07 Hyperbolic Pattern 08 Hyperbolic Pattern 09 Hyperbolic Pattern 10 Hyperbolic Pattern 11 Hyperbolic Pattern 12 Hyperbolic Pattern 13 Hyperbolic Pattern 14 Hyperbolic Pattern 15

The Hyperbolic Pattern examples display a Patterned Polygon Orbit Trap in the context of the Hyperbolic Tiling Transformation. The resulting hyperbolic tiling is located inside the unit disk. A circle inversion transformation is applied to reflect the tiling to the outside of the disk as well. A Circle Orbit Trap is placed between the hyperbolic tiling and its reflection and the entire image is passed through a complex transformation. This is explained in detail below.

## Performance

The examples are based on the Hyperbolic Tiling transformation. There are a few properties associated with the transformation that are related to quality and also affect performance. When you are exploring, you can improve performance by adjusting these properties on the transformation's properties page.

Select the transformation's properties page:

General
Mandelbrot / Julia / Newton
Orbit Trap
Transformation 1
Conditional Transform
Transformation Array
Hyperbolic Tiling
Properties

The border of the Poincare disk represents infinity with respect to the hyperbolic plane. As the tiling approaches the disk border, the polygons get smaller and smaller. The Epsilon value determines how close to get to the Poincare disk border when generating polygons. Smaller values of Epsilon close the gap between the disk image and the true border, resulting in a smoother edge on the disk. However, this also results in many more polygons near the border which can greatly increase processing time. I recommend using an Epsilon of 0.01 for experimentation and then reducing the Epsilon to 0.001 for images you want to save.

## Patterned Polygon

The Patterned Polygon Orbit Trap is a solid regular polygon colored with a symmetric pattern. Options are provided to control the polygon and the pattern.

Important: The Force Execution option is checked by default on the Patterned Polygon Orbit Trap page. This forces the application to process the Orbit Trap and perform the fractal generation step every time you display the fractal. This is required because a random pattern is generated for the orbit trap every time you run the Display Fractal command. You can prevent the pattern from changing by setting the Seed to a non-0 value. This is described fully below. However, if you change the Seed to a non-0 value, you should also uncheck the Force Execution option on the Patterned Polygon Orbit Trap page to improve processing optimization.

The options in the Polygon Options section control the polygon.

N is the number of edges/vertices in the polygon. By default, the polygon is centered at the origin,  with the midpoint of one of the edges at the point (1,0) on the X axis. The Center, Angle, and Scale options are used to position/scale the polygon. Center is the center of the polygon, Angle is the angle of rotation relative to a horizontal line through the center of the polygon, and Scale is the distance from the center of the polygon to the midpoint of each edge.

The options in the Pattern Options section control the pattern displayed on the polygon.

Seed is the seed passed to the random number generator used to generate the pattern. If Seed is set to 0, the default value, a random seed is used to generate the pattern. This means that a different pattern will be generated each time you display the fractal. The random Seed value is printed to the Error/Debug Window so you can save the seed for the patterns you like. The standard procedure is to set the Pattern Options as required, set Seed to 0, and check the Force Execution option on the Patterned Polygon Orbit Trap page as described above, so you can override the processing optimization and regenerate the fractal image even though you have not changed any of the options. Now display the fractal, over and over again, until you get a pattern you like. Then, open the Error/Debug Window and copy the seed value displayed there, into to Seed option, replacing the 0, and uncheck the Force Execution option on the Patterned Polygon Orbit Trap page.

The pattern is formed by generating a collection of directed lines based on a set of constraints defined by the trap's property settings. The trap's index for a given point within the trap, is based on where the point falls, relative to each of the lines; i.e., on which side, of each of the lines, the point is found. In the color controller (see Play with Color below) the trap's index is used for coloring the trap.

Lines controls the number of lines used to generate the pattern. Larger values result in more complex patterns.

Order is a measure of randomness applied to the pattern. A value of 0 results in the most random looking pattern. Larger values, result in less random patterns.

Colors is the number of colors you want to use in the pattern. Colors is a number between 3 and 255 but you should avoid powers of 2 for the best results; i.e., avoid the following: 4, 8, 16, 32, 64, 128.

Symmetry and Dihedral control the pattern symmetry. Symmetry is the order of rotational symmetry and is a number between 1 and 16. The value 1 results in no rotational symmetry. Check Dihedral to add dihedral symmetry to pattern.

The Angle and Scale options rotate and scale the pattern relative to the polygon.

## Hyperbolic Tiling

The Hyperbolic Tiling transformation replicates a hyperbolic polygon over the hyperbolic plane represented by the Poincare disk in such a way as to form a hyperbolic tiling pattern. The Poincare disk is a model for hyperbolic geometry that maps the hyperbolic plane onto the unit disk. The Hyperbolic Tiling transformation has options to control the tiling. The most important of these are the Hyperbolic Tiling Options named p and q. A [p,q] regular tiling of the hyperbolic plane maps a hyperbolic polygon with p sides, centered at the origin (called the central polygon), over the hyperbolic plane such that q polygons meet at each polygon vertex. For example, a [4,5] regular tiling maps 4 sided polygons onto the hyperbolic plane such that 5 polygons meet at each polygon vertex. A regular tiling of the hyperbolic plane exists if and only if (p-2)*(q-2) > 4. So, for example, a [4,5] tiling is possible but a [4,4] tiling is not.

The Hyperbolic Tiling transformation requires the central polygon to have N-way rotational symmetry, where N = p/Math.GCD(p,q). The Math.GCD function returns the greatest common divisor of the given arguments. The following table gives a few examples:

 p q GCD(p,q) N = p/GCD(p,q) 3 7 1 3 3 8 1 3 4 5 1 4 4 6 2 2 4 7 1 4 4 8 4 1 5 4 1 5 5 5 5 1 5 6 1 5 5 7 1 5 5 8 1 5 6 4 2 3 6 5 1 6 6 6 6 1 6 7 1 6 6 8 2 3 7 3 1 7 7 4 1 7 7 5 1 7 7 6 1 7 7 7 7 1 7 8 1 7

The Shape option can be set to Disk, Strip, or Ring. The Disk setting is the default and results in a [p,q] regular tiling of the hyperbolic plane mapped to the unit disk. The Strip and Ring settings cause additional transformations to be applied that change the resulting shape. Each of these settings enable the Order option that controls the complexity of the shape. For the mathematical basis for these settings (and more), see the pages Conformal Models of the Hyperbolic Geometry and Artistic Models of the Hyperbolic Geometry by Vladimir Bulatov.

The Show Inversion option, if checked, applies a circle inversion transformation to the disk to display the tiling outside the disk as well. Separation option controls the gap between the inside and outside of the disk.

The Scale Factor and Rotation options are applied to the base fractal before the fractal is replicated to form the hyperbolic tiling. The Scale Factor option is used to scale the fractal up/down. Check Normalize to scale the fractal relative to the central tile (i.e., the unit disk is scaled to fit just within the central polygon), otherwise the scale factor is applied directly to the fractal. The Rotation option rotates the fractal. The Disk Rotation option rotates the disk after generating the tiling.

The border of the Poincare disk represents infinity with respect to the hyperbolic plane. As the tiling approaches the disk border, the polygons get smaller and smaller. The Epsilon value determines how close to get to the Poincare disk border when generating polygons. Smaller values of Epsilon close the gap between the disk image and the true border, resulting in a smoother edge on the disk. However, this also results in many more polygons near the border which can greatly increase processing time. I recommend using an Epsilon of 0.01 for experimentation and then reducing the Epsilon to 0.001 for images you want to save.

Normally, the tiling is generated by rotating a polygon 180 degrees about the midpoint of each edge to form the adjacent polygons. The Reflect option uses reflection rather than rotation to generate the adjacent polygons. Reflect is disabled if q is odd.

The base fractal should fit entirely inside the central polygon. Parts of the fractal outside the central polygon are discarded.

## Change the Transformation

You can apply a transformation to the fractal.

The examples all have 2 base transformations: Composite Function and Conditional Transform. The Conditional Transform maps the Patterned Polygon Orbit Trap to the hyperbolic tiling inside/outside of the unit disk, thereby filling the complex plane. It is important that the Conditional Transform transformation remain at the bottom of the list of transformation as you play with changing the transformations as described in this section.

Not that the examples Hyperbolic Pattern 09 and Hyperbolic Pattern 15 use the transformation Half-Plane to Disk rather than Composite Function, so some of the description below is not applicable to those 2 examples.

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.

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 Conditional Transform transformation. Normally, I move the new transformation to the top of the list, but it can be placed anywhere above the Conditional Transform transformation. See Transformation Array for details.

Then select the Identity transformation:

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 Patterned Polygon Orbit Trap Properties

Open the Patterned Polygon Orbit Trap properties page:

General
Mandelbrot / Julia / Newton
Orbit Trap
Orbit Trap Map
Instructions: Patterned Polygon
Properties

The Center, Angle, and Scale properties in the Polygon Options section should not be changed in the context of these examples.

The value of the Symmetry property should only be changed in conjunction with compatible changes in the Hyperbolic Tiling transformation.

The value of Symmetry you set in the Patterned Polygon orbit trap must be compatible with the Hyperbolic Tiling transformation. Specifically, the Patterned Polygon property Symmetry must be set to the value N described in the Hyperbolic Tiling section above. For example, if the Hyperbolic Tiling is configured to generate a [4,5] regular tiling of the hyperbolic plane, the table in the Hyperbolic Tiling section above tells us that N is 4, so the Symmetry property on the Patterned Polygon orbit trap must be set to 4. I recommend checking the Dihedral property as well.

The remaining properties can be freely changed.

Read the discussion of these properties in the Patterned Polygon section above for details.

## Change the Hyperbolic Tiling Properties

Select the transformation's properties page:

General
Mandelbrot / Julia / Newton
Orbit Trap
Transformation 1
Conditional Transform
Transformation Array
Hyperbolic Tiling
Properties

Epsilon controls how close to get to the Poincare disk border when generating polygons and was discussed above in the Performance section.

Additionally, you can change the properties Shape, Order, p, q, and Reflect. You should leave the remaining properties as they are.

These properties are described in the Hyperbolic Tiling section above. Some caveats follow.

When changing Shape, you should only use Disk or Ring. Setting Shape to Strip is not compatible with these examples.

If you change the properties p and/or q, you need to make corresponding changes in the Hyperbolic Tile transformation and the Patterned Polygon orbit trap.

To update the Hyperbolic Tile transformation, select the transformation's properties page:

General
Mandelbrot / Julia / Newton
Orbit Trap
Transformation 1
Conditional Transform
Transformation Array
Hyperbolic Tile
Properties

Change p and q to match the change you made in the Hyperbolic Tiling transformation.

To update the Patterned Polygon Orbit Trap properties page, open the trap's properties page:

General
Mandelbrot / Julia / Newton
Orbit Trap
Orbit Trap Map
Instructions: Patterned Polygon
Properties

The value of Symmetry you set in the Patterned Polygon orbit trap must be compatible with the Hyperbolic Tiling transformation. Specifically, the Patterned Polygon property Symmetry must be set to the value N described in the Hyperbolic Tiling section above. For example, if the Hyperbolic Tiling is configured to generate a [4,5] regular tiling of the hyperbolic plane, the table in the Hyperbolic Tiling section above tells us that N is 4, so the Symmetry property on the Patterned Polygon orbit trap must be set to 4. I recommend checking the Dihedral property as well.

## Play with Color

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

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

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

Change the Count to match the Colors property that you chose on the Patterned Polygon properties page.

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

Offset sets the index in the Colors array of colors that maps to Trap Index 0.

The properties in the Cutouts section are not applicable for these examples.