When the application is started the first time a .frozenlight folder in the users home directory will be created automatically. It contains all data like the pattern definitions and stored calculations. If you want to use the museum mode of the new 1.2.x version than delete or rename the .frozenlight folder of the older 1.1.1 version before you start the 1.2.x version.

Command-Line Options

To start the latest frozenlight version in fullscreen museums mode use the following command:

java -jar frozenlight-1.2.1.jar -f -mu

The next command starts the application in fullscreen (no window decoration) with the Black 2 color theme and a radius of 60% of the maximum radius.

java -jar frozenlight-1.2.1.jar -f -c "Black 2" -r 60%

The web start links on the main page start the animation in the following way:

java -jar frozenlight-1.1.1.jar -m -a -s -c "Black 2" -r 60%

Here the command line options have the following meaning:

-fFullscreen without any window decoration
-muTouchscreen for museums,exhibitions or tablets (since version 1.2.0)
-mNo menubar (for versions <= 1.1.1)
-a [speed]Run animation, speed is optional and can be one of 1,2,3,4
-sNo installation: omit creation of .frozenlight folder
-c themeColor theme: Red, Blue, "Deep Blue",Black, "Black 2", ...
-r radiusRadius is given in percent of the max. possible radius
-l patternShow the given pattern at startup: Origami, Cross, ...

A full list of supported command line options can be found in the mvc.Controller or FroZenLight class. Don't hesitate to mail me if you have problems getting frozenlight running.

Exhibition/Museum Mode

When the desktop application is started in museum mode or when the android app is started they show a lot of touchscreen buttons and look like it is shown in the following screenshot:

Here the buttons have the following meaning:

Buttons of this kind select a pattern. The first line (5x5) shows the size of the circle grid. The second line (7) shows the length of the reflection path that defines the pattern. p stands for a point boundary condition: The first or the last point of the defining reflection path lies exactly on a horizontal,vertical or diagonal symmetry axis of the circle grid. g stands for a gradient boundary condition: The ray entering the first point or leaving the last point of the defining reflection path has an exact gradient of -1,0 or 1 (see next button). The last percent number (40%) shows the maximum radius for which the pattern can be computed. The max. radius is rounded to ten's.
If this button is pressed after a pattern has been selected than it shows the defining reflection path in pink color. The screenshot shows the pattern of the previous pattern button and the pink path emerges if this button is pressed. As it can be easily verified the path has 7 reflection points. The leftmost point is fixed by a p boundary condition (lies on a vertical symmetry axis) and the rightmost point is fixed by a g boundary condition (the ray leaving the last point has an exact gradient of -1).
Switches between different radiuses: 10%,20%,...,90% of the maximum possible radius. If a pattern selection requires to lower the radius because the maximum radius for the pattern is lower than the radius in use than this is done automatically.
Starts an animation that shows the transition from one light pattern to another by moving the light source within the circle lattice. Desktop app: A selection of a pattern stops the animation. Android app: Press animation button again to stop it.
Switches between various color themes.

The circle grid and the light source position can be altered like in the main view of the application: Mouse or finger and the cursor keys. Press ESC or ctrl-x to terminate the application.

Creating a Symmetric Light Pattern

Symmetric patterns can be created either with the build in high precision calculator or with the Pattern Manager. With the first method, which is illustrated in the sample solution of the first exercise, only simple patterns can be made. More complex patterns can be created easily with the help of the Pattern Manager. Let's take a look at the definition of the Flowerbed pattern that is included in the release of the application:

The images show a sketch of the reflection path and the values as they are fed into the Pattern Manager. If we think of the purple lines as given by the linear equation y = mx + b then the corresponding numbers represent rough estimations for the gradient m. But if m belongs to a boundary condition then it must be one of inf, 1, -1 or 0. The path starts at grid cell (2,2) with a point that has exactly the same x coordinate as the circle center. Therefore the first boundary value is of type point and has the exact gradient inf (infinity). If we go counterclockwise around the circle (2,2) starting to the right of the circle center then our starting point is the first of two possible points. Therefore we choose a FIRST as the boundary value. Next we feed the sequence of cells and the corresponding gradients into the manager. Finally the secondary boundary value is set to -1 because the path terminates with a line that has exactly this gradient (white -1). As the secondary Boundary Value Type we set GRADIENT LEFT because we move left with respect to the x-axis direction when going through the final bound ray. By setting the grid size to 5x5 and finding out experimentally that the radius can not be chosen greater than 80% we are finished with the pattern definition. Calculating the pattern yields the following image:

For the gradient 50 it would also be possible to set 10 or inf. Important: If you don't press save on an edited pattern it will get lost when something else is selected. Experience showed that a single set of estimated gradients works for all radiuses. However if the estimations are to rough it might be necessary to fine tune them by opening the Log window and analyzing the angle deltas between the estimated and the computed gradients.

Creating a Crypto Light Pattern

The FroZenLight application has a build in algorithm to translate a given text message into a corresponding light pattern that can be translated back to text only by using the symbol map and a pencil. This crypto light pattern can only be revealed if the accurate radius is known.
The first thing that needs to be found out for a given text message is the circle lattice size and the precision. This can be done by opening the pattern manager and right clicking with the mouse on the text folder to create a new text pattern:

The title of the message is Message_For_Alice and the text is shown in the middle of the window: Alice, you forgot ... . On the bottom we can read of the required lattice size immediately: 12 x 12. Pressing the estimation button displays the required precision that the light source position, the radius and the angle needs to have and a rough calculation time. The layout shows how the characters are distributed on the lattice. Now its time to adjust the settings in the FroZenLight main window to a grid size of 12 x 12 and a precision of 1000.

Next a radius is required for which the pattern has to be calculated. Assume that the following verbal agreement with Alice exists: The lottery numbers from the German lottery have to be put together to a single number. Apply a division by two and a square root and repeat this two operations until a number p < 0.6 is obtained. Then the radius r = p * rmax is the right radius.
rmax is the maximum radius that the circles can have and is given by 2/(2*s) where s x s is the lattice size and 2 is the side length of square containing the lattice. This agreement can now be worked out on the arbitrary precision calculator:

The first line contains the merged lottery numbers (19.06.2013). x=$2 in the values column for example means that the result of line 2 has to be taken for x. The last line represents the computation of r = p * rmax. The values all have a precision of 1000 (the main windows precision selection). To apply this radius open the variable window deselect truncation in the options menu and copy and paste the value into the radius field (double click followed by ctrl-c copies and double click followed by ctrl-v pastes the number):

Press enter on the radius field and press the calculate button at the pattern manager to calculate the pattern. After a few minutes you should get the following:

The main window shows now the crypto light pattern. The variables window shows the calculated values like height and angle. Truncation can now be selected to cut off the unnecessary digits. An email to Alice should now contain the following data:

    size   = 12 x 12
    height = 0.544763434202007953576867719382957461253704606642035093091327105444565

    angle  = pi*-0.12464001923823191096638627910412572757695413090181031610263392794

Important note: When copy and pasting the angle value from the variables window then the minus sign gets lost very often (maybe a java bug). All Alice has to do to make the crypto light pattern visible is:

  1. Set the grid size to 12
  2. Set the precision so that numbers from the email are not truncated: 500 in this case
  3. Compute the radius from the agreement with the calculator as shown above.
  4. Opening the variable view and switching off truncation at the options menu. Copy & Pasting the computed radius and the angle and height from the email into the right fields pressing enter everytime.

Decryption can then be done with the symbol map shown in the above image or with some secret map that only you and your friend knows. Eol (end of line) and bol (begin of line) symbols are only needed to go to the next line in the crypto light pattern. Putting also the precision into the mail could ease up the decoding a bit.

Last edited: 28.07.2014