Content

  1. Creating a Basic Pattern
    1. Sequence of Cells
    2. Initial Gradients
    3. Boundary Conditions
    4. Maximum Radius and Grid Size
    5. Propagator
    6. Testing
  2. Creating a Text Pattern
    1. Ciphering

1. Creating a Basic Pattern

Be sure that the pattern manager is open. In the list on the left side select the the basic folder with the mouse. Then right click with the mouse on this folder and select new. Now you can replace the new entry in the name field with a new pattern name.

1.1 Sequence of Cells

Every mirroring circle can be thought of as residing in the middle of grid cell. To define the sequence of reflection points insert the coordinate of the appropriate grid cell into the cell column of the sequence table. The following example shows the cell coordinates for a 3x3 grid:
	
    -------------------------
    | (0,2) | (1,2) | (2,2) |    
    -------------------------
    | (0,1) | (1,1) | (2,1) |    
    -------------------------
    | (0,0) | (1,0) | (2,0) |
    -------------------------    

A simple star is defined by the following sequence of cell coordinates:

	
       | Cell  |  Gradient |
    ---|-------|-----------|
     1 | (2,1) |           |
    ---|-------|-----------|
     2 | (1,1) |           |
    ---|-------|-----------|
     3 | (1,2) |           |

It is important that the sequence is minimal. It must not contain any symmetry axis. The following definition of a star is therefore not allowed:

       | Cell  |  Gradient |
    ---|-------|-----------|
     1 | (2,1) |           |
    ---|-------|-----------|
     2 | (1,1) |           |
    ---|-------|-----------|
     3 | (1,2) |           |
    ---|-------|-----------|
     4 | (1,1) |           |
    ---|-------|-----------|
     5 | (0,1) |           |

Here the algorithm for calculating the reflection points gets into trouble on cell 3 because the gradient is not bound anymore. A context menu offering operations to simplify the making of larger patterns becomes available after right clicking with the mouse on the table.

1.2 Initial Gradients

To compute the pattern further information is needed. In the gradient column you provide an estimation where the reflection point is expected to be. This is done by inserting the gradient of the line that connects the middle of the circle and the reflection point. For the angle phi and the gradient m of this connecting line the following relation holds:
    tan phi = m
The following illustration shows some lines and their values for phi and m:

    phi=90,m=inf   phi=63.4,m=2   phi=45,m=1         phi=26.6 m=0.5
          .           .           .                       .    
        y .                    .                    . 
          .        .        .                 .
          .              .              .  
          .     .     .           .         
          .        .        .
      2 ...  .  .     .  	             
          .  .  .
          ................................................ phi=0,m=0
       (0,0)    :                                      x 
                2

The unit of phi is degrees. The gradient m changes sign if the line is mirrored at the x-axis. The image shows that a line with m1=10 does not differ much from a line with m2=100 while the difference between m1=0 and m2=0.3 is much greater. The star example would work out to:

       | Cell  |  Gradient |
    ---|-------|-----------|
     1 | (2,1) |    0      |
    ---|-------|-----------|
     2 | (1,1) |    0.5    |
    ---|-------|-----------|
     3 | (1,2) |    1      |

A good gradient estimation lies much closer to the real gradient than to the orthogonal one. It is possible to use inf as an estimation for a high gradient value. Gradient estimations can be fine tuned by analyzing the angle differences between initial and computed gradients as they are displayed by the log window (Menu: Util->Logs).

1.3 Boundary conditions

The boundary conditions define the special situation for the first and the last reflection point. There are two main types of boundary conditions: POINT and GRADIENT.
If you select POINT as the fist boundary value type than the initial gradient of the first cell must be one of -1,0,1 or inf. The gradient does not fix the reflection point entirely. If we start for phi = 0 and go counterclockwise around the circle there is the possibility to chose between the first and second point. Use the boundary value selector now to make the right choice. For the second boundary condition and the last circle the situation is exactly the same.
Otherwise if you select GRADIENT (LEFT or RIGHT) as the first boundary value type then you fix the gradient of the ray that hits the first reflection point (the reflection of this ray than goes on to the second reflection point and so on). With the first boundary value selector you therefore select one of the gradients -1,0,1.
To determine whether GRADIENT LEFT or GRADIENT RIGHT should be taken traverse through the sequence of reflection points and observe the movement with respect to the x-axis while you go through the boundary ray: If you move in negative direction chose GRADIENT LEFT. For positive direction chose GRADIENT RIGHT. For the second boundary condition the situation is the same: Here you fix the gradient of the ray that moves away from the last reflection point.

1.4 Maximum Radius and Grid Size

The maximum radius for which the pattern is still visible has to be determined experimentally. The best is to start the pattern definition with a max. radius of 100% meaning that all radiuses are allowed. If your pattern is visible for a certain range of radiuses 10%,20%,...,X% and not visible for radiuses X+10%,... then you can insert X as the maximum radius.This is of course just a rough estimation for the real maximum radius which is an irrational number in most cases. Note: A bad set of initial gradients might cause a lower maximum radius than would be possible according to the geometry of the pattern. The grid size has to be given in the form mxm, m >=2 (2x2,3x3,...).

1.5 Propagator

Propagator patterns are not bound to the grid of mirroring circles. The ray starts and ends outside the grid. For propagators the sequence of cells in the sequence table starts outside and ends inside the grid. The following example shows the definition of a garland pattern on a 30x30 grid:

       | Cell   |  Gradient |
    ---|--------|-----------|
     1 | (30,0) |    inf    |
    ---|--------|-----------|
     2 | (29,1) |   -0.3    |
    ---|--------|-----------|
     3 | (30,1) |    0.3    |
    ---|--------|-----------|
     4 | (29,0) |    inf    |
 
The first cell lies outside as the grid cells are given by (x,y) 0<=x,y<=29. To see other examples take a look at the following patterns: Garland 1-3, Honeycomb,Patchwork and Dragon Skin. The rotation of the circle grid is determined by traversing backwards through the cell sequence and locating the first ray that connects an inner and an outer cell. The rotation then makes this ray horizontal starting from the right side.

1.6 Testing

Press the calculate button to compute the pattern. Go through the following list if you don't see the pattern that you expected from your pattern definition:
  1. No pattern is shown for all radiuses r=10%,...,90%.

    Check the boundary values,cell sequence and the initial gradients for correctness. Most likely one of the initial gradients is wrong.

  2. You see only a part of the pattern for some radius.

    Check the initial gradients for correct sign or value.

  3. The pattern is visible only for some radiuses <= max. radius but not all.

    Some of the initial gradients need to be fine tuned. Go to the menu of the main window and open Util -> Logs. Here you see a list of all computed gradients. The delta column shows the difference between computed and initial gradients in degrees. Analyzing the deltas for two radiuses for which the pattern is visible gives a feeling of how the gradients change.

2 Creating a Text Pattern

Select the pattern folder named Text with the mouse and create a new pattern by right clicking on this folder and selecting new from the drop down list. Open the Character Map via the menu of the main window (Util -> Symbols of Light). It shows how a sequence of characters that has been entered in the text field of the pattern manager is written onto the mirroring circles after you have pressed the calculate button. The estimate button shows how much digits and time a computation of a light text really needs. Any radius value between 10% and 70% of the half side length of a grid cell is possible. I recommend to use values around 40% for best readability of the light symbols. For a pattern that needs a lot of computation time there is the possibility to store the results to avoid recalculation of the pattern every time it is selected or the calculate button is pressed: The store calculations check box needs to be selected before the first calculation is started.

2.1 Ciphering

Due to the very sensible dependence of the light text on the radius it may be possible to use the application as an encryption system for small messages. Consider the following scenario:
Persons A and B arranged verbally a radius of sqrt(15)*10 % of the half side length of a grid cell. The absolute radius value must have exactly 20 digits. Person A now sends a secret message to B by doing the following steps:
  1. Create a new text pattern in the pattern manager and enter the message.
  2. Set the grid size s via the main menu (Settings -> Grid Size) to the value shown by the pattern manager.
  3. Open the calculator via the main menu (Util -> Calculator) and calculate the percent value rp = sqrt(15)*10. The radius can be calculated by the formula r = (rp/100) * 2/(2*s). The 2 in the numerator is the side length of the box containing the circle lattice and division by 2*s gives the maximum radius (100%). Keep the first twenty digits of the calculated radius r and delete all others.
  4. Open the variables window via the main menu (Settings -> Variables). Switch off truncation in the options menu and copy and paste the calculated radius r to the radius field. Press enter on that field.
  5. At the pattern manager press the calculate button and wait until the progress window for the calculation disappears.
  6. Now you should see your message appearing in the main window as a sequence of light characters. Copy and paste height and angle from the variables window into an email. If you copy with double clicking on the number and pressing ctrl-c (fastest way) check if the minus sign of the angle don't get lost. Also add the grid size. The secret message containing these three numbers is now ready for sending.
Be sure that the radius you set in step c) does not exceed the current precision. Otherwise you have to recalculate and set it again after the precision change that occurs at step e).
Person B reads the received secret message by doing the following steps:
  1. Set the grid size s to the given value in the message.
  2. Open the variables window. Switch off truncation in the menu of this window and copy and paste the value for height from the message into the appropriate field without pressing enter.
  3. Select the height field and look at the message at the bottom showing the total number of digits d0. Adjust the precision p of the application so that p >= d0.
  4. Copy and paste the height again (if precision has changed) and press enter on that field. Copy and paste the angle into the Variables window and press enter. Set the distance to 1.5 and press enter.
  5. Do step c) of the steps described for sender A and copy and paste the calculated radius to the radius field in the variables window and press enter on this field. The secret message should now appear as a sequence of light characters.
  6. Open the character map via the main menu (Util -> Symbols of Light) and translate the message.