FCM
Fractal Clip Maker
V.2.12
A little program to produce animated Mandelbrot and Julia sets
Copyright (c) 2006-2010 by Friedemann Seebass, Germany
27 February 2010

Contents | gehe zu deutscher Version

- A. Quick Start Guide
  - 1. What is FCM good for?
  - 2. System Requirements
  - 3. Installation
    - a) Installing the Java Runtime Environment
    - b) Installing FCM
    - c) File List
  - 4. Program Start
    - a) Starting out of the "fcm" Folder
    - b) Starting from the Desktop
    - c) Memory for the Java VM
  - 5. Your first Fractal Image
  - 6. Zoom into the Mandelbrot set
  - 7. Play the Clip
  - 8. Draw Julia Sets Picking c-Values
  - 9. Remove all Images/Load a Clip
- B. FCM in Detail
  - 1. The Main Window
  - 2. The Menu Bar
    - a) The File Menu
    - b) The Edit Menu
    - c) The Animation Menu
    - d) The Help Menu
  - 3. The Tool Bar
  - 4. The Image Button Panel
  - 5. Image Controls
  - 6. The Status Panel
  - 7. The Preferences Dialog
    - a) Section "Help Browser"
    - b) Section "Language"
    - c) Section "Skin"
    - d) Section "Others"
  - 8. The Image Geometry Dialog
    - a) Section "Image Size"
    - b) Section "Borders"
    - c) Section "Max. Iterations"
    - d) Section "Constant c"
    - e) Buttons
  - 9. The Image Colors Dialog
    - a) Section "Number of Colors"
    - b) Section "Color Gradient Editor"
    - c) Further Control Elements
  - 10. The Animation Parameters Dialog
    - a) First and Last Image
    - b) Settings
  - 11. The Video Creation Dialog
    - a) Concept of Video Creation
    - b) Section "Files And Folders"
    - c) Section "Video Settings"
    - d) Section "Create And Play Video"
    - e) Tips for Creating High Quality Movies
  - 12. Some Technical Aspects
  - 13. Example: Optimizing an Image
- C. Short Introduction into the Mathematical Aspects
  - 1. Iterations
  - 2. Complex Numbers
    - a) The Complex Plane
    - b) Calculation Rules
  - 3. The Mandelbrot Set
  - 4. The Julia Set
- D. Appendix
  - 1. Known Bugs
  - 2. Known Shortcomings
  - 3. Change Log
  - 4. Other Fractal Generators

# A. Quick Start Guide

## 1. What is FCM good for?

FCM is a program to produce fractal images. You can:

- produce Mandelbrot sets
- produce Julia sets
- zoom in and out by moving and sizing a zoom rectangle
- manipulate colors
- manipulate all parameters needed to produce the images
- produce animations while:

- zooming
- moving the plane
- manipulating the "c-value" in Julia sets
- changing the color

Okay, there are other programs doing more (see section D.4.), but FCM is very easy to use, I think, even if you don't know what fractal images are. If you want to learn a bit about it read the short introduction in chapter C.
My motivation to add a further fractal generator to the public has been to learn Java Swing; this theme is ideal to do that because the application contains 10 % algorithm and 90 % user interface.

## 2. System Requirements

Java: FCM is written in Java. First of all you need the Java Runtime Environment version 1.6.0 or newer. The oldest Java version I could test FCM with successfully is 1.6.0_04-b12. Download the newest version from www.java.com (about 16 MB).
Hardware: The weakest machine I tried out to run FCM has been a Pentium 200 MMX with 64 MB RAM. But don't expect clips to play fluently with such an old computer. My Pentium M 1500 plays clips (400 x 300 pixel) with a rate of about 15 frames per second, an AMD Duron 700 reaches 15 fps only with a size of 200 x 200 pixel.
Operating system: Thanks to Java the operating system is not important. I tested FCM on Windows ME, 2000, XP, Vista, 7, SuSE Linux 10.3 and Ubuntu 6.1.

## 3. Installation

The installation will need two steps described in the following sections:

- Installing the Java Runtime Environment version 1.6.0 or newer. This is only necessary if it is not installed on your computer already.
- Installing FCM.

If you want to create videos as AVIs or MPEGs you need an additional software like MEncoder. See section B.11 for details.

### a) Installing the Java Runtime Environment

First of all check whether the JRE is installed already: Open a console (under Windows the MS-DOS-prompt in the Accessories menu) and type
java -version
If the output is something like
java version "1.6.0_04"
Java(TM) SE Runtime Environment (build 1.6.0_04-b12)
Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharing)
all is fine, proceed with section 3.b).
Otherwise download the newest Java Runtime Environment for your system (e. g. jre-6u7-windows-i586-p-s.exe) from www.java.com, execute the file and follow the instructions on your screen.
Attention, Linux users: Make sure that the path to the Java interpreter is set into your $PATH environment variable. The Java installer seems not to do that. On my SuSE system I put a line
PATH=/opt/jre1.5.0_06/bin:$PATH
(or wherever you installed the JRE into) into the file /opt/kde3/bin/startkde.

### b) Installing FCM

The installation file "fcm.zip" contains the folder "fcm". Unzip this folder to an arbitrary place. That's all.

### c) File List

The unpacked fcm.zip file contains the following data:

Folder/File | Description
fcm | Program folder.
+-doc | Folder with the program documentation.
| +-pics | Folder with all pictures.
| | `-*.png | Some images with screen shots of dialog boxes etc.
| |-manual_en.html | This user manual.
| `-manual_de.html | The user manual in German.
+-examples | Folder with some example files.
| +-julia.frc | Fractal image with a Julia set.
| +-mandel1.clp | Clip with a zoom into the Mandelbrot set.
| `-*.* | Further example files.
+-lib | Java library folder.
| `-swing-layout-1.0.4.jar | Java swing library.
+-FCM.jar | The FCM application.
+-startFCM.bat | Windows batch file for starting FCM with some example commands. Works with Linux too (errors can be ignored).
+-mandel.ico | A little icon for desktop links under Windows.
+-mandel.png | The same icon for application window decoration.
`-readme.txt | Text file with first hints.

Table A1: FCM program files

## 4. Program Start

### a) Starting out of the "fcm" Folder

Windows User:
Start the program by double clicking the file FCM.jar.
If this does not work (sometimes other programs "hijack" the jar extension and want to unpack the files in it) click FCM.jar with the right mouse button, click "Open With..." and choose the entry "Java(TM) 2 Platform Standard Edition binary" (check the box "Always use this program to open these files" to make the change persistent). Or open a console, navigate into the fcm folder and enter the command
java -jar FCM.jar
Linux User:
Open a shell, navigate into the folder "fcm" and start FCM with the command
java -jar FCM.jar
Hint:
If you see a dialog with a message like "Could not find the main class. Program will exit!" or the message
Exception in thread "main" java.lang.UnsupportedClassVersionError: fcm/FcmMDIApplication (Unsupported major.minor version 49.0)
in your console, then you have an old Java Runtime Interpreter installed. Install the version 1.6.0 or newer as described above.

### b) Starting from the Desktop

Windows User:

- Hold the Shift and Control key pressed and drag the file "FCM.jar" to the desktop; this creates a link. Start FCM by double clicking the link icon. You may change the link icon by replacing it with the file fcm/mandel.ico; do this by right clicking the link and change the icon with the properties dialog.

Linux User (KDE only, I did not try other desktops):

- Right click on the desktop => the context menu appears.
- Click on "Create New/Link to Application..." => a dialog appears.
- Enter into the edit field of the "General" tab "FCM".
- Activate the "Application" tab.
- Enter into the "Command" field the command "java -jar FCM.jar".
- Enter into the "Work path" field the path to the fcm folder (e. g. "/home/fs/fcm").
- If wanted replace the Icon by fcm/mandel.png.
- Leave the dialog with OK.
- Start FCM by double clicking the link icon.

### c) Memory for the Java VM

With the commands shown above the Java VM will allocate 64 MB at the most. That is enough for about 120 images in the format 400 x 300 pixel. If you want to allow the VM allocate 512 MB for example you have to start FCM with the following command:
java -jar -Xmx512m FCM.jar
You will find further examples in the file "startFCM.bat". See also section B.7.d).

## 5. Your first Fractal Image

Fig. A1: Creating a new image | When starting FCM you will see a common multi document application with a menu bar, a tool bar etc. For a first impression open the file menu and click the item "New Mandelbrot Image" in it. An empty window will appear, and the "Draw" button will be blinking. Fig. A2: Drawing an image

Press the "Draw" button, and a Mandelbrot set will be drawn. The image is put into the image list panel on the right side:

Fig. A3: Image button in the image list panel

## 6. Zoom into the Mandelbrot set

Click the "Zoom" button in the tool bar. A zoom rectangle will appear which can be moved with the mouse or the cursor keys. Its size can be adjusted with the mouse wheel or the "+" and the "-" keys. Give the rectangle a size a little smaller than the window, place it into the middle of the window and press the left mouse button or the return key.
Fig. A4: Zoom into the Mandelbrot set
The Mandelbrot set is recalculated. Repeat these steps several times; each image is put into the image list. Be sure that the "New" button remains pressed while you zoom into the plane (otherwise the actual image is replaced rather than a new one created). You can leave the zoom mode by pressing the "Zoom" button again or by clicking with the right mouse button.

## 7. Play the Clip

Fig. A5: Playing a clip | When you have some images in the image list press the "Play" button in the image button panel. All images calculated so far will be replayed in the actual window. Click the "Endless" check box and play the clip again. Now it will be played endless forth and back. Click the "Cycle" check box additionally, and the clip is cycled instead. The clip is played till the "Stop" button is pressed. Type "1000" into the "Delay" field and play the clip again. Now there will be a delay of one second between each image.

## 8. Draw Julia Sets Picking c-Values

Click menu item "File/New Julia Image" and press the "Draw" button again (compare Fig. A1). Place the two windows side by side and activate the Mandelbrot window by clicking its title bar. Click the "Pick" button, move the mouse into the Mandelbrot window and click somewhere. Doing this you pick the complex value beneath the mouse pointer, and a new Julia set based on this value will be generated. Repeat this several times.
Fig. A6: Drawing Julia sets and picking c-values
You can see that the shape of a Julia image depends on the c-value. See chapter C for details.

## 9. Remove all Images/Load a Clip

Fig. A7: Removing all images | Click the "Clear" button in the image control panel. All images will be removed from the image panel and the memory. Click menu item "File/Open Clip ...". A file select dialog will appear. Navigate to the example folder in the FCM directory and load the clip mandel1.clp. Loading will take a while because all pictures have to be recalculated. Press the "Play" button to play the clip and the "Stop" button to stop it. | Fig. A8: Loading a clip

# B. FCM in Detail

## 1. The Main Window

Fig. B1 shows FCM's main window:
Fig. B1: Main window
You see a common MDI application (multi document interface) with a desktop and several windows on it, a menu bar, a tool bar, a status panel and on the right side a list with image buttons and some control buttons. These elements and all dialog boxes are described in the following sections.

## 2. The Menu Bar

The menu bar holds all menus available in FCM.
Fig. B2: The menu bar

### a) The File Menu

The file menu holds all menu items concerning file handling, printing, preferences and lets you exit FCM with saving the preferences.

File Menu | Menu Item | Description
--- | --- | ---
| New Mandelbrot Image | Opens a new empty window to draw a Mandelbrot set.
New Julia Image | Opens a new empty window to draw a Julia set.
Open Image ... | Opens a file dialog for selecting a fractal image to be loaded from disk. Between other data the image's pixel size is stored in the file. This size will be restored if there is no empty window open. If there is an empty window open you can let adjust the image size to the size of the window. (But, this works only if the image has not been stored with activated menu item "Save with Colors Array".)
Save Image | Saves the actual image to disk. This item is enabled only if the image has been saved already and has a name therefore.
Save Image As ... | Saves the actual image to disk. A file dialog is opened to select a name.
Export Image As ... | Saves the actual image in the PNG (Portable Network Graphics), BMP (Windows OS/2 Bitmap) or JPG (Joint Photographic Experts Group) format. A file dialog is opened to select a name. The format depends on the extension (".png", ".bmp" or ".jpg") you give the file.
Export Selected Images As ... | The same as menu item "Export Image As ..." but all selected images in the list are saved. The file name will be automatically expanded by a number between "0000" and "9999" for each image. If your file name is "test0234.png" e. g. the numbers will start with "0234".
Export All Images As ... | The same as menu item "Export Selected Images As ..." but all images in the list are saved.
Encode Exported Images to Video ... | Opens a dialog to transform exported images into a MPEG or AVI file. See section B.11 for details.
Open Clip ... | Opens a file dialog for selecting a clip to be loaded from disk. The images are inserted into the image list above the currently activated image. The clip's pixel size is treated in the same way as the opening of an image: You can let adjust the size to a currently open window.
Open Clip But Export Each Image As ... | Opens a first file dialog for selecting a clip and then a second one for entering the file name of the first image to export. After calculating each image it will be exported immediately and removed from the image list to get the memory free again. So this is a combination of the menu items "Open Clip ..." and "Export All Images As ..." without holding the images in the image list. For an explanation see section B.11.e).
Save Selected Images As Clip ... | Saves all selected images to disk. A file dialog is opened to select a name.
Save All Images As Clip ... | The same as menu item "Save Selected Images As Clip ..." but all images in the list will be saved.
Save with Colors Array | This is a toggle item which effects the way an image is saved: If active an image is stored with its colors array, if not only its parameters (borders, color settings etc.) are stored (see section B.12). In the second case the files are much smaller, but the colors array has to be recalculated after loading. If your computer is slow or the images are really big you should activate the item. The item controls also the saving of clips. Be aware that clip files will be really big if this item is checked!
Page Setup ... | Shows your printer's configuration dialog.
Print ... | Shows your printer's printing dialog.
Preferences ... | Opens the Preferences dialog box. It is described in chapter B.7.
Restart FCM | Restarts the application. This is necessary if you've chosen a new language setting.
Exit | Leaves the application and saves besides the "preferences" some other parameters as the main window's position and size. These data is not saved if the program is exited by the window closer in the upper right corner.

Table B1: File menu items

### b) The Edit Menu

With the edit menu you can manipulate the image list. Single or multiple images can be selected using the Ctrl- or Shift-Keys like files in the Windows Explorer, see section B.4.
Attention: FCM is not able yet to handle the system's clipboard; it is not possible therefore to copy and paste images into other applications.

Edit Menu | Menu Item | Description
--- | --- | ---
| Cut Selection | Removes the selected images from the list and copies them to the buffer.
Copy Selection | Copies the selected images into the buffer.
Paste Copied Images | Pastes the images in the buffer into the image list above the topmost selected image.
Paste Copied Images Reversed | Pastes the images in the buffer into the image list above the topmost selected image, but revertes the sequence before doing it.
Delete Selection | Deletes the selected images from the list.
Delete All ... | Deletes all images from the list and the start- and end-image for animations (the last is not done by the "Clear" button in the image control panel).
Remove Key Frame Flag | After creation of an animation the images between the transition was calculated are so called key frames; they are marked with a red triangle. This menu item removes the key frame property.
Select All | Selects all images in the list.
Select Copies | Selects these images again which are actually in the buffer. Useful for restoring a selection.
Select Key Frames | Selects all so called key frames which are built while creating an animation.
Invert Selection | Selects all images not selected at the moment and vice versa.
Goto Next Image | Selects and activates the next image in the list. All other images are deselected.
Goto Previous Image | Selects and activates the previous image in the list. All other images are deselected.
Goto Next Selected Image | Activates the next selected image in the list. The selection remains unchanged.
Goto Previous Selected Image | Activates the previous selected image in the list. The selection remains unchanged.
Go To Next Key Frame | Activates the next key frame in the list. The selection remains unchanged.
Go To Previous Key Frame | Activates the previous key frame in the list. The selection remains unchanged.
Goto Image ... | A dialog pops up to enter an image no. When leaving it with OK this image will be activated. A selection remains unchanged but this image will be added to the selection.

Table B2: Edit menu items

### c) The Animation Menu

The animation menu holds all menu items for creating animations automatically. See section B.10 for details creating animations.

Animation Menu | Menu Item | Description
--- | --- | ---
| Parameters ... | Opens the Animation Parameters dialog box. It is described in chapter B.10.
Adjust Frame Rate ... | If you want to create an AVI file out of an animation (see section B.11.) you have to set how many images per second the video should have. If you change the frame rate, the number of pictures between to key frames have to change also, of course. (At least if the time distance between the key frames should remain the same.) Here you can adjust the frame rate of all selected key frames to the value that is placed in the Video Creation Dialog. More precisely: The number of images between the selected key frames will be recalculated in a way, that the time difference between them remains the same, but the new frame rate can be used when creating an AVI file.
Calculate Animation | Calculates a smooth transition between all selected images. See section B.10 for details.

Table B3: Animation menu items

### d) The Help Menu

The help menu lets you access the manual and shows version infos.

Help Menu | Menu Item | Description
--- | --- | ---
| Contents | Opens the manual page in your web browser. In Windows your registry is scanned to detect your default browser, in Linux Firefox is used. These settings can be changed in the preferences dialog box, see section B.7.
About | Opens the about dialog box with version infos, the license and some system properties.

Table B4: Help menu items

## 3. The Tool Bar

Fig. B3: The tool bar
The most important functions you can execute with the buttons in the tool bar.

Button | Description
--- | ---
Draw | Draws a fractal image into the actual window using the actual settings.
Zoom | Opens a zoom rectangle which marks a cutting in the actual window. There are the following commands: Mouse move or cursor keys: Moving of the cutting. Left mouse button or Return: Activating and drawing the cutting. Mouse wheel or "+"- and "-"-key: Change the rectangle's size. Middle mouse button or "0"-key: Sets the rectangle to the same size as the window is; this may be used for moving the plane rather than zooming. Right mouse button or ESC: Leaving the zoom mode.
Pick | This item is only enabled if at least one Julia window is open and a Julia image is drawn in it. A click with the left mouse button picks up the complex value beneath the mouse pointer and draws a new Julia set using this value as "c"-parameter immediately. If your active window holds a Mandelbrot set the Julia set is drawn into the last active Julia window. The commands are nearly the same as above: Mouse move or cursor keys: Moves the cursor. Left mouse button or return: Chooses the value and draws a new image. Right mouse button or ESC: Leaves the pick mode.
Data | Opens the Geometry dialog box. It is described in section B.8.
Colors | Opens the Colors dialog box. It is described in chapter B.9.

Table B5: Tool bar items

## 4. The Image Button Panel

Fig. B4: The image list | The image button panel shows all images calculated so far. You can think of the image list as a stack: The oldest image is at the bottom, a new image is put on top of it. The image indicator at the bottom shows how many images are in memory and which of them is activated (in the example on the left 18 pictures are in memory and the 16. is activated). Single or multiple images can be selected like files in the Windows Explorer [see also section B.2.b)]: A single image is selected by clicking it with the mouse. A second image is selected by clicking it with the mouse and holding down the Ctrl key. Multiple images are selected with the mouse while holding down the Shift key. While the "New" button is selected, drawing an image results in a new image. If the "New" button is not selected the actual image is replaced by the drawn image instead. When animations are created so called key frames arise. These are marked with a red triangle in the upper left corner.

## 5. Image Controls

With the image control buttons you can scroll through the images in memory, move them up and down, delete and copy them. Furthermore the images can be played as a clip.

Panel | Control Element | Description
--- | --- | ---
| Next | The next image is displayed. (Shortcut "D".)
Prev | The previous image is displayed. (Shortcut "C".)
Up | The actual selection is moved up one position.
Down | The actual selection is moved down one position.
Del | The actual selection is deleted from the list (and memory).
Clear | Removes all images from the list and the memory.
Play | The actual selection is played as a clip. If only one image is selected all images are played beginning with the selected one. Attention: Since the colors are recalculated when displaying an image, and this procedure needs time, your images should not be too large to achieve a high frame rate.
Stop | With this button all long enduring operations can be interrupted. E. g. playing a clip, loading a clip, drawing an image.
Cycle | If this check box is checked a clip is cycled, i. e. the first image is displayed again after the last or vice versa. The direction is determined by the direction the clip is actually running when you check the box.
Endless | If this check box is checked the clip is played endless forth and back. If the "Cycle" check box is checked additionally the images are cycled.
Delay/ms | This element is used to set a time delay between two images when playing a clip. For smooth animations set it to 0, if you want to display a slide show you may set it to 2000 e. g. to display the next picture after 2 seconds.

Table B6: Image control elements

## 6. The Status Panel

The status panel shows the most important parameters of an image. The leftmost four entries show the borders of your image, i. e. the borders of the complex plane your image is painted into. Because a Mandelbrot set shows the c-plane they are labeled with "crMin" etc. A Julia set shows the z-plane, therefore the labels are "zrMin" etc.
Fig. B5: Status panel (Mandelbrot set)
Fig. B6: Status panel (Julia set)
Also you can see the actual mouse pointer's coordinates and the number of iterations the iteration process has needed to calculate the color of that point. These data is displayed in the rightmost three fields.
Julia sets show additionally the value of the constant c in the fields "cr" and "ci" used for calculating that image.

## 7. The Preferences Dialog

This dialog can be reached with menu item "File/Preferences ...".
Fig. B5: Preferences dialog

### a) Section "Help Browser"

In this section you can adjust the help browser path. If the check box "Use Default Browser" is checked, and FCM is running under Windows, your registry is checked for your default browser; under Linux Firefox is used. If this does not work or you want to use another HTML browser you can choose your favourite one with the "Search" button.

### b) Section "Language"

For the time being you can use FCM with two languages, English and German. Since all texts are to be reread in case of a language change, FCM has to be restarted with "File/Restart FCM" to take effect.
With the setting "Default" FCM starts in the language of your desktop.You can override this default language by starting FCM from a command line with
java -jar -Duser.language=de -Duser.country=DE FCM.jar
or
java -jar -Duser.language=en -Duser.country=GB FCM.jar

### c) Section "Skin"

In the third section the skin (look and feel) of the application can be adjusted. FCM's layout is optimized for the MS Windows skin, the layout is rather poor with Motif. Unfortunately the MS Windows skin is not available in the Linux version of the Java Runtime Environment.
The list of skins is generated dynamically by retrieving the installed Java look-and-feels.

### d) Section "Others"

In the last section you can adjust these settings:

- Downscale Image When Exporting:
  If another value than 100 % is given in the drop down list FCM downscales an image to the given value when exporting (= saving as PNG-, BMP- or JPG file). In case of a 50 % value an image is only half as wide e. g. You can see a preview when clicking your image (to set the focus to its window) and pressing the key "1" on your keyboard.
  What is it good for? With downscaling you can improve the image quality dramatically, when creating an image much bigger then wanted at first (e. g. 1600 x 1200 Pixel) and saving it then in the wanted size, e. g. downscaling it to 25 %, i. e. to 400 x 300 Pixel. This parallels an anti-aliasing process and smoothes edges. See also the section about supersampling in B.8.a) and the example in B.13.
- Max. Memory for VM:
  As shown in chapter A.4.c) you can tell the Java Virtual Machine how many memory it may allocate at the most. To save the user from manipulating the command line you can do this here. But, the setting will work only if FCM is restarted with menu item "File/Restart FCM", because only then FCM can generate its own command line to start the second instance! (If you select a value greater then your main memory the restart will fail without any comment.) Starting FCM by double click on "FCM.jar" will start the VM with the default value of only 64 MB; the setting here will have no effect then.
  It is in fact rather bothering to have to start FCM twice. If you need more memory regularly you should better adjust your "startFCM.bat" and start FCM by double clicking this file.
  (If someone knows how to adjust the memory setting at runtime, let me know. I even could not figure out how to obtain the amount of built-in memory with Java.)
- Show Memory Usage:
  If this check box is activated, in the lower right corner of the program window the VM's memory usage is displayed and will be updated when an image is created or deleted.
- Show Tooltips:
  If this box is checked short help texts are shown for a control element when the mouse rests over it.
- Preserve Zoom Rectangle:
  When zooming into the plane it is quite interesting to see which cutting is to be seen in the next image. The zoom rectangle will be preserved if the check box "Preserve Zoom Rectangle" is activated. The "New" button in the image panel must be pressed additionally.
  The zoom rectangle is only stored to file if menu item "File/Save with Colors Array" is activated.
- Confirm Closing FCM:
  If checked you will be prompted with a message box when leaving FCM, and you can abort the operation.
- Play Sound After Operation:
  FCM plays the file "sound.wav" in the installation directory after longer operations like drawing an image or creating a clip if this box is checked. If you'd like another sound replace the file by your favourite one.

The options are saved to the file fcm.ini in your home directory only when leaving FCM with the "File/Exit" or "File/Restart FCM" menu items. This file is not written if leaving the application with the window closer, and your changes will be lost in this case.

## 8. The Image Geometry Dialog

This dialog can be reached with the button "Data" in the tool bar.
Fig. B8: Image geometry dialog
With the image geometry dialog you can adjust the image geometry parameters. It is divided into four panels and the button group:

### a) Section "Image Size"

- Width and Size:
  Here you can adjust the size of your image in pixels.
  The size of an existing image is not changeable. If you change these values on an existing image, a new window is opened when leaving the dialog with OK rather than changing the old images size. But, this new window contains all parameters of the old one, you just need to press the "Draw" button to get a resized copy of your original.
- Presets:
  This drop down list contains some common image sizes just for the sake of comfort. The range is from QQVGA ("Quarter Quarter Video Graphics Array") to WQUXGA ("Wide Quad Ultra Extended Graphics Array").
- Buttons "x 2", "x 3", "/ 2" und "/3":
  These buttons multiply or devide the actual width and height by the given value. Multiplying is useful if you want to downscale an image when exporting [antialiasing, see chapters B.7.d) and B.13] and saves you the mental arithmetic. The deviding buttons are only there to revert modifications.
- Supersample:
  This setting is used for improving the image quality by calculating multiple iteration values per pixel and averaging them. The bottom line is to calculate an image bigger than displayed. If setting the supersample value to 2 e. g., in fact an image of double width and double height is calculated.

  Fig. B9: Without Supersampling (value is 1) | Fig. B10: With fourfold supersampling (value is 4)

  Attention:
  The supersampling is done in the space of the iterations, the downscaling described above is done in the space of the colors. That is a fundamental difference, there are advantages and disadvantages for both (see also the section about the color dialog):
  - With supersampling you need more computing time only when calculating the iterations, the coloring is done on the normal sized image and is fast enough to be done in real time (if the image is not too big).
  - With downscaling you have to create and work with a very big image which is downsized not until the very last step, the export as a file. You need more computing time not only when calculating the iterations but also when coloring the image because you have to handle always with a big image. On large images coloring can not be done in real time.
  - With supersampling you need a large number of colors; when using few colors there will be artefacts. Look at this color gradient:
    Fig . B11: Color gradient dark gray - red - light gray
    If you decide to use only two colors out of this gradient, e. g. dark gray and light gray, the picture will look as usual without supersampling, namely there are steps on the edges. But, with supersampling these steps unfortunately will not vanish as intended: Now there will be iteration values of 2.5 e. g., and these are mapped exactly to the red color in the gradient; the edges will be even better to be seen - not what we want to achieve:

    Fig. B12: Without supersampling, two colors | Fig. B13: Artefacts with fourfold supersampling, still two(!) colors

  - With downscaling you can achieve a much better result if only few colors are used. There are only two colors and the edges are smoothed:
    Fig. B14: Large image, downscaled to 25 %, two colors
  Conclusion:
  Downscaling delivers better results than supersampling if few colors are used, but needs because of the big images much more computing time and memory.
  Supersampling delivers as just as well results when enough colors are used and saves computing time when coloring and memory.

### b) Section "Borders"

These four elements let you adjust the mapping of the window into the complex plane. crMin is the plane's left border, crMax its right (real axis), ciMin its bottom and ciMax its top (imaginary axis). Since the aspect ratio of a pixel is fixed to 1:1 you are not free in choosing arbitrary values for ciMin or ciMax: At least one of this is calculated automatically depending on the auto adjust check box. If both are checked the top and bottom borders are calculated so that the middle of the vertical axis will remain as it has been.
Normally you will not enter values here by hand but change the image by zooming or moving it directly with the mouse.

### c) Section "Max. Iterations"

As you can read in section C.3 the iteration which is calculated for each pixel may never come to an end. You can configure here the number of iterations which will be calculated at the most. If this number is exceeded the procedure terminates (and the pixel will go black).
It is not easy to find an optimal value for this maximal number: High values will lead to long calculation times, low values will cause "unsharp" images:

Fig. B15: Unsharp image, 1600 iterations | Fig. B16: Sharper image, 5600 iterations

A thumb rule (for Mandelbrot sets) is: When zooming into the complex plane the number should become greater. This rule is performed by the auto adjust check box. Especially for regions in the "fissure" of the Mandelbrot set (Fig. B15 and B16 are from that region) and for Julia sets you may correct this auto setting by your own inputs. Julia sets often needs higher values to avoid large black regions which are not really black.
The automatic can be influenced with the field "Multiply By": The value calculated automatically will be multiplied with this value, and the result is used for calculating the images.

### d) Section "Constant c"

If the active window shows a Julia set its c-value is displayed here and may be altered. This can be done more comfortable with the "Pick" button in the tool bar.

### e) Buttons

- Help:
  Opens this section of the user manual.
- Defaults:
  Sets all entries to the default values.
- Draw New:
  Draws a new picture with the actual settings. The new picture is put as first element into the image list. The Cancel button is not able to undo this!
- Apply:
  Repaints the actual picture with the setting made in the dialog. The Cancel button is not able to undo this!
- Cancel:
  Leaves the dialog without applying the changes. This will not work if the "Draw new" or "Apply" button has been pressed before.
- OK:
  Leaves the dialog applying the changes.

## 9. The Image Colors Dialog

This dialog can be reached with the button "Colors" in the tool bar.
Fig. B17: Image colors dialog
The image colors dialog lets you change the color mapping of your fractal image. Let's have a closer look at the data FCM generates while calculating an image. As described in section C.3 the complex plane is scanned pixel by pixel, and for each pixel the iteration is performed. FCM stores the number of iterations needed for |zn| to become greater than 2.45 (square root of 6) in a two-dimensional array of the same size as the image. Each value in this array is mapped to a color, and the corresponding pixel in your image will be set to this color. The mapping from value to color can be manipulated here.
You see, there is a dependency to the maximal allowed iterations described in the previous section. Say, we have in maximum 200 iterations, then we have obviously 200 different colors at the most! (May be even less because you could display a region of the complex plane where the iteration terminates for all pixels before 200 iterations are reached for one of them.)

### a) Section "Number of Colors"

Think, we look at a region of the complex plane where all 200 values of iterations are available, and the image could show 200 different colors therefore. Nevertheless we may wish not to use all 200 colors, because we like to see an image with only two colors e. g. This can be adjusted with the slider "Number of Colors" if the "manual setting" radio button is active. Be aware that the maximal choosable value depends on the "max. Iteration" setting described in the previous section B.8.
In Fig. B17 there is a value of 40. This means, that a pixel with an iteration number of 41 will have the same color as a pixel with iteration number 1, with 42 the same as with 2 and so on.
If you play around a little with FCM and zoom into the Mandelbrot set you will see that your images are better if you don't use always the same fixed number of colors. Therefore FCM tries to find a good choice by itself depending on image parameters if one of the auto modes is on.
The first ["auto (count iterations in image)"] counts the number of different iteration numbers in the image.
Example: Say there are some pixels with 10 iterations, other pixels with 20 iterations and all the rest have 200. Then the number of iterations is 3, more colors are not necessary (and possible), and FCM sets the number of colors to this value. Zoom clips into the Mandelbrot set tend to have a color flickering in this auto mode.
The second ["auto (use max. iterations)"] uses the image property "max. Iterations" (see Fig. B8). This value may change automatically when zooming in depending on your settings.
Third the automatically derived number of colors is always modified by the number given in the field "reduce number of colors by divisor"). Experiment with these values to get colors you like!

### b) Section "Color Gradient Editor"

The color gradient editor is the most powerful tool to adjust the images to the own imagination. Above we have seen that there is a mapping from iterations to colors. But what iteration value corresponds with what color? That is controlled with the color gradient and the two sliders "Smallest Color" and "Biggest Color".
At first you should create a color gradient containing the wanted colors. A color gradient can be changed by adding, deleting and changing the round color sliders. In fig. B17 the color gradient consists out of five colors (green, red, yellow, blue and white) having the same distance from each other e. g.
The functions of the editor are as follows:

- Adding a color:
  By left click with the mouse into the gradient or pressing the "Add" button. The added color is always white.
- Deleting a color:
  By dragging the round slider in top or down direction out of the gradient or pressing the "Delete" button.
- Changing the position of a color:
  By moving the round slider with the mouse or entering a value between 0 and 10,000 in the field "Position".
- Activating a color:
  By clicking the round slider with the mouse or pressing the buttons "<" or ">".
- Activating multiple colors:
  By clicking the round sliders with the mouse and holding down the Ctrl- or Shift key.
- Changing a color:
  By moving the round cursor in the field "Color Chooser" or by entering its RGB value into the fields "Red", "Green" and "Blue".
- Exchange all colors:
  The button "o>o" shifts all color values to the right, the position of the round sliders remains unchanged. The button "o<o" shifts all color values to the left.
- Align all colors:
  The button "o-o-o" moves all round sliders, all sliders have equal distances from each other then.
- "Stretching" and "Compressing":
  If a round slider is moved with the Ctrl key pressed, all distances between the sliders are stretched and/or compressed.
- Color Gradient Presets:
  There are some predefined color gradients selectable in the scroll area. You can load and save your own gradients with the buttons "Load" and "Save".

The color gradient of an image will be stored together with an image and it is not necessary to store it seperately.
Now we have a color gradient, but the mapping between a pixel's number of iterations and its color is still not clear. This can be assigned with the to sliders '"Smallest" Color' and '"Biggest" Color'. In Fig. B17 the '"Smallest" Color' slider stands at the green position. That means: All pixels with an iteration number of 1 become green. The '"Biggest" Color' slider stands at the white region, and the "Number of Colors" is 40. That means: A pixel with an iteration number of 40 will become white. All color values between 1 and 40 are spread evenly over the color gradient between the two sliders. A pixel with iteration value 41 has the same color as a pixel with value 1 and so on. If the '"Smallest" Color' slider stays behind the '"Biggest" Color' slider the colors are wrapped around. You can see this easy if you choose "Number of Colors" as 2 and play with the sliders: Only the two colors the sliders are set on will be in the image.
Attention: Pixels with color value = max. iterations are always black. This color can not be changed.

### c) Further Control Elements

- Proof Immediately:
  If this box is checked all changes are immediately performed in the actual image. If your image is small enough (or you have a fast computer) you can change the colors nearly in real time. This may give impressive effects.
- Apply to All Selected Images:
  If you have generated a clip by zooming into the Mandelbrot set e. g. you will often change the color mapping for some pictures because the colors are not satisfying. With this check box you can command FCM to change the colors of all selected images in the image list when leaving the dialog. But, the buttons in the image list will only be updated if the check box "Update Buttons" is also checked.
- Buttons:
  The buttons have the same functionality as in the image geometry dialog described above.

## 10. The Animation Parameters Dialog

This dialog can be reached with menu item "Animation/Parameters ...".
Fig. B18: Animation parameters dialog
As we have seen in section A.6. you can generate animations by creating each single image by hand. This is rather awkward. Therefore you can select some images (two at least) from the image button panel, and FCM will calculate a smooth transition between them automatically. How this is done you can influence with the animation parameters dialog.

### a) First and Last Image

In this panel the start and end image of the first selected image pair are shown. The check boxes "Smooth Movement" cause the calculation of additional images at start and end of the transition, therefore the movement seems to be slower. So you have a smoother transition from one pair to the next.

### b) Settings

In this panel all parameters FCM is able to modify while calculating an animation are listed (with the exception of changes in the color gradient; such a transition you can not influence). If a parameter does not differ in the start and end image the spinner element is grayed, its entry is set to 0, and it is not changeable. In Fig. B18 you can see a zoom into the Julia plane e. g. The first entry in the resize spinner says to reduce the width of the image by 8 percent each image. This will result in 36 images as stated in the last line. Of course this depends on the sizes of the start and end image.
All parameters are influencing each other: If you change the resizing percentage, this will result in a change of the image number, and this results in a change of the other parameters. Try it out.
Hint: This will only work if the spinner you are modifying has the focus. Unfortunately the Java Swing spinner element used here is buggy (JRE 1.6) and does not have the focus even if the cursor blinks in it! Therefore FCM sets the focus per program code when the mouse enters the spinner. To indicate this the label's color is changed to blue. Only in this state the update mechanism is working! This means that you can not modify the entries reasonably with the keyboard, the mouse is necessary, I'm sorry.

GUI Element | Description
--- | ---
Duration/ms | In this field you can enter the duration (in milliseconds) the transition between the start and end image should have. For an animation played inert FCM this value has no meaning. It is important only if you want to create an AVI file out of it. And even then the duration is the result of the number of images (the last field in the dialog) and the frame rate given in the video creation dialog only. What is the field good for then? It is needed in the following situation: You want to add music to an animation, and according to the rhythm the transitions should take place. Now you need a well defined duration for each transition. If you know the frame rate that the AVI file will have you can easily calculate the needed number of images of a transition to get the wanted duration of course. Oafishly if you want to change the frame rate: Then you have to step through all transitions and to adjust the number of images. Therefore you can remember the duration in this field. This value will be used only with menu item "Animation/Adjust Frame Rate ...". This menu item gets the frame rate out of the video creation dialog and adjusts for all transitions the number of images so that the duration for the transition remains the same.
Frames per Second | For this field the same as for the field "Duration/ms" is true: It is only of interest when creating AVI files. It helps you to avoid mental arithmetic when you want to get the duration, the frame rate and the number of images together.
Resize each image by | This spinner is enabled if the start image differs in size from the end image. You can enter here the percentage from the actual image width the next picture will differ in size from the current picture.
Move each image by | This spinner is enabled if the start image differs in position from the end image. The position may differ in its horizontal or vertical position. The average is calculated, this results in a constant. Each image is moved in horizontal and vertical direction by the percentage of that constant.
Change max. number of iterations by | This spinner is enabled if the max. iteration number differs between start and end image and at least one of them is not set to "auto adjust" (see section B.8). Since this entry should differ between start and end image only in case of zooming into the plane, and then it should increase logarithmically, the value you can enter here is the percentual change to the next image rather than an absolute value.
Change Julia constant cr by | This spinner is enabled if the real part of the Julia constant c differs between start and end image. The difference is calculated by FCM, and you can enter here a percentage of this difference. This results in a constant value each new image will differ from its predecessor.
Change Julia constant ci by | Same as above.
Change number of colors by | This spinner is enabled if the number of colors differs between start and end image and at least one of them is not set to an "auto" mode (see section B.9). The value you can enter here is the percentage of the actual color number the next image will differ from the current one.
Change "Smallest" Color by | This spinner is enabled if the '"Smallest" Color' differs between start and end image. The following four cases are to distinguish: The start value is lesser than the end value and you increase the value each step => the value moves forward from start to end each step: 0 start -> end 10000 |-------------|--------------------------|------------| The start value is greater than the end value and you increase the value each step => the value moves forward from start to end each step, but wraps around when reaching the max. value of 10000: 0 -> end start -> 10000 |-------------|--------------------------|------------| The start value is lesser than the end value and you decrease the value each step => the value moves backward from start to end each step, but wraps around when reaching the min. value of 0: 0 <- start end <- 10000 |-------------|--------------------------|------------| The start value is greater than the end value and you decrease the value each step => the value moves back from start to end: 0 end <- start 10000 |-------------|--------------------------|------------| In the spinner the absolute value for each step can be entered. To order FCM to move backward enter a negative value.
Change "Biggest" Color by | Same as above.
Results in | This spinner is always enabled. Enter the number of images the animation will consist of here. Making changes will alter all other parameters of course.

Table B7: Animation parameters
Hint: The key frames contain the complete information to create an animation. Therefore it is sufficient to store the key frames to disk only, the animation can be restored completely by recalculating it again.
Tip: Especially with clips of Julia sets you have to experiment with the parameters a little and recreate images often. This takes a lot of calculation time with larger images. Therefore it is better to create a clip with small images and save it when finished. When loading again you can adjust the size to an arbitrary size by opening an empty window with the wanted size first.

## 11. The Video Creation Dialog

This dialog can be reached with menu item "File/Encode Exported Images To Video...".
Fig. B19: Video creation dialog

### a) Concept of Video Creation

Creation of MPEG- or AVI video files is a complex procedure, FCM is not able to do it without a further software.
You have to perform the following steps:

- Create an animation using FCM as described above. Result is a number of images in the image list.
- Export all these images with menu item "File/Export All Images As ..." as BMP-, PNG- or JPG files in an empty folder. Result is: All these images (and only these images) are in that folder at your harddisk.
- Start an external software to encode the images into a video file. Result is the animation as MPEG- or AVI file (or another video format) at your harddisk.

There are some free applications to convert single images into a video known to me:

- MEncoder (http://www.mplayerhq.hu):
  Very powerful open source software, extensive functionality, but no graphical user interface.
- Bmp2Avi und pjBmp2Avi (http://www.divx-digest.com/software/bmp2avi.html):
  Two little, easy to use applications written by Paul Roberts; Bmp2Avi is a console application, pjBmp2Avi has a graphical user interface.
- PicToAvi (http://www.fractalizer.de):
  A little, easy to use application by Sven Kohn and Robert Sontheimer, delivered with the fractal generator "Fractalizer"; it is not able to embed audio files.

MEncoder supports most image formats and has the biggest functionality, therefore FCM supports video creation with this application by means of the video creation dialog; it is graphical user interface allowing you to feed the most important parameters into MEncoder's video creation console application.
So download the file "MPlayer-mingw32-1.0rc2.zip" (or newer) from http://www.mplayerhq.hu/design7/dload.html and unpack it at an arbitrary place (nearly arbitrary: the path must not contain spaces!). The folder "MPlayer-1.0rc2" will be created, in this folder are the two files "mencoder.exe" und "mplayer.exe"; FCM will use theses console applications to create and to play videos.

### b) Section "Files And Folders"

The most important section is "Files And Folders"; when all settings are done here, the remainder of the dialog are filled automatically with default settings. Changes are only needed if wanted.

GUI Element | Description
--- | ---
Input File Type | MPlayer is able to handle various image formats. Enter the type you have exported your images into, BMP, PNG or JPG.
Inpput File Folder | This is the folder you have exported your images into.
Audio File | If you want to hear some music while playing the clip choose an audio file here. MEncoder will mux it into the video stream.
Output File | Give place and name of your video file here.
MPlayer Folder | FCM needs to know where your MEncoder is. Give the folder here where the file "mencoder.exe" is in.

Table B8: Section "Files And Folders"

### c) Section "Video Settings"

In this section you can provide MEncoder with some parameters. The most important ones are available with drop down lists.

GUI Element | Description
--- | ---
Video Codec | Used for selecting the video codec. Which is best depends on the videoplayer you are using. The Windows Mediaplayer is best satisfied with "msmpeg4v2".
Audio Codec | The same is true as for the video codec. Use "copy", "mp3lame" or "pcm" for Windows Mediaplayer compatibility.
kBits per Second | MEncoder can adjust the data rate steplessly, some standard presets are in the drop down list. As higher the data rate is as higher is the video quality, but as bigger is the resulting video file. Experiment to find the best agreement.
General Options | This field is for general parameters for the MEncoder if you want to set one or another. See the MEncoder documetation.
Codec Options | Here some parameters are given concerning the video codec. You could use "General Options" instead, the field is there only for the sake of clarity.
Frames per Second | Here is also true: As higher the frame rate as higher is the video quality (a cinema movie has 24 images per second, in TV there are 25), but as bigger will be the video file. And, last but not least your video is shorter! 15 frames per second are a good compromise.

Table B9: Section "Video Settings"

### d) Section "Create And Play Video"

These settings will be normally filled by FCM automatically when settings in the other sections are made. Change these settings only if wanted (e. g. if you want to use another application instead of MEncoder) and do not change the settings above anymore because these changes will override your settings here again.
The principle is: FCM creates a batch file "enc.bat" when the button "Create Video" is pressed. This file contains all commands and parameters needed for encoding your images into a video and will be executed then via the system console.
In the same way a batch file "play.bat" is created and executed when the button "Play Video" is pressed.

GUI Element | Description
--- | ---
Shell Command | This is the command for starting a console shell and executing a batch command. Don't change this under Windows; under Linux you could enter your favourite shell here.
Encoding Batch File | Here you can see the content of the batch file "enc.bat" which is created when pressing the "Create Video" button. The batch program changes into the directory with your exported images first and executes MEncoder with all settings given in this dialog then.
Playing Batch File | The same as "Encoding Batch File", but this is the file for playing the created video, executed when the "Play Video" button is pressed. The most important MPlayer commands while playing are: Left: -10 seconds Right: + 10 seconds Down: - 1 minute Up: + 1 minute Backspace: normal speed {: half speed }: double speed F: Full screen
Encode Command | This is the command for starting "enc.bat".
Play Command | This is the command for starting "play.bat".
Close Console Window After Executing Command | When encoding or playing a video a console window opens executing the batch file. The window remains open afterwards to let you see error messages etc. This is cumbersome when you have adjusted all parameters and you are not interested in the messages any longer. So check this box, and the console window will be closed after executing the command.

Table B10: Section "Create And Play Video"

### e) Tips for Creating High Quality Movies

Clips like to consist out of some thousend images which can be hold in memory only if they are small (e. g. 200 x 150 pixels). But, to create an AVI file in good quality out of these you need the exported images in a bigger format (e. g. 800 x 600 pixels). If you want to improve the quality by scaling down the images while exporting (see section B.8.a)) even bigger formats are recommended (e. g. 1600 x 1200 pixel). Of course you could split your clip into parts and calculate and export them one after another. But using menu item "File/Open Clip But Export Each Image As ..." is much more comfortable:

- Prepare your complete clip in a small format so that it fits in the memory.
- Save your clip and delete the image list.
- If you want to scale down the images for quality improvement enter in the preferences dialog into field "Downscale Image When Exporting to" the value 50 % e. g.
- Put into the image geometry dialog a big image format, e. g. 1600 x 1200 pixels.
- Open with menu item "File/New Mandelbrot Image" a new window of this size.
- Now click on menu item "File/Open Clip But Export Each Image As ...". Choose your small format clip and enter in the second file dialog the name of the first image to export. The file name should be something like "xxx_0001.bmp".
- FCM states that the clip has another size than the open window. Answer the question "Adjust image to window?" with "Yes".

=> Each image of the clip will be calculated in the big format now, exported immediately (scaled down when indicated) and removed from the image list then. Only the last image will remain in the image list at the end, and all images are on the hard disk as *.bmp files.
The exported images can be converted to an AVI file now as described above.

## 12. Some Technical Aspects

To generate a fractal image three kinds of data are involved:
First there are the image parameters. These are the parameters you can adjust in the parameter dialog boxes (see Figs. B8 and B9). They are sufficient to describe an image completely and to calculate the image. Only these parameters are stored to disk if menu item "File/Save with Colors Array" is not checked.
Second there is the array of iteration numbers. It is a two-dimensional array of 32-bit-values. In this array for each pixel is stored how many iterations are necessary to exceed the border of 2.45 for |zn| (see chapter C for details); this value corresponds with a color value, but it is not the 24-bit-true-color-value you will see in the image window. The array is stored in main memory for each image in the image list. If menu item "File/Save with Colors Array" is active the array is stored to disk additionally to the image parameters.
Third there is the true color image you can see in the image windows. This image is calculated out of the array of iteration numbers by using the color parameters each time an image of the list is activated. It is not stored with an image (it is owned by the window and not by the image). When playing a clip the same happens: The true color image has to be recalculated out of the iterations array for each single image. You can imagine that this colorizing process needs time! But, it saves memory, and therefore you can hold more images in the list, and a clip can be longer.
All images are held in the main memory, no hard disk space is used.
Conclusion: If your computer is slow you should generate clips with smaller images to speed up the frame rate. May be it's better to activate the menu item "File/Save with Colors Array".

## 13. Example: Optimizing an Image

The following example shall show how to create high quality images with FCM in an efficient way. Restart FCM to ensure all Parameters are set to their defaults.
The most important rule while creating images with FCM is:
Work with images as small as possible!
The calculation of fractals is very computationally intensive, as larger the images are as slower is FCM. On my Pentium M 1500 a size of 400 x 300 Pixels is a good choice (this is why this size is the default value). Only as the last step, when all parameters are set as wanted, you should create a big image which is to be saved as JPG file e. g. But, as long as you have to screw at the parameters a lot, it's not bad to use even smaller images, therefore the following examples have a size of 200 x 150 Pixels only.
The first step is always to search for an interesting region in the c-plane. Let's have a look into the fissure between "head" and "body" of the Mandelbrot set; after some zooms we find a promising place, a structure like a jellyfish:
Fig. B20: Zoom into the Mandelbrot set searching an interesting region
You see in the last image still large black regions which are not "Mandelbrot like"; presumebly the maximal number of iterations chosen by FCM is not big enough. Open the geometry dialog (button "Data" in the tool bar) and increase the maximal number of iterations from about 650 to 2000, the black regions will vanish:
Fig. B21: Maximal number of iterations increased to 2000
But, the colors are rather boring now, because the number of colors is increased too since it is linked with the number of iterations. Such spiral regions appear especially interesting when choosing the number of colors so that the colors are repeated in each spiral cycle. This we can achieve in the color dialog (button "Colors" in the tool bar) with the slider "Number of Colors".

Fig. B22: Color gradient "FCM", number of colors reduced to 63 | Fig. B23: Color gradient "Spectrum (b/w)", modified (white color removed, all colors moved to the left a little)

In fig. B22 the number of colors is reduced to 63, but, the colors are somewhat pale. The color gradient "Spectrum (s/w)" is a little more colorful. It appears even better if you remove the white color from the gradient and move all colors to the left a little until the image gets a dark background, the colors are more shiny then (fig. B23).
A little unattractive are the clear color gradations. Unfortunately FCM can not do it better, there is the Fractalizer with its "fine gradations" more advanced [perhaps I can figure out some day how they do it :-)]. But you can take advantage of the Mandelbrot set's self-similarity and look for a similar region with more gradations. So, look for the next smaller version of the Mandelbrot set on the "antenna", zoom to the same place between head and body and adjust the colors in an appropriate way.
Fig. B24: Smaller Mandelbrot set on the mother's "antenna"
At last is to decide how big the finished image should be, e. g. 400 x 300 Pixels. Supersampling is not appropriate here because of the small number of colors (try it), therefore we use "downscaling" for quality improvement.
To do this open the image geometry dialog and push the "x 2" button three times. When leaving the dialog with OK a new empty window with the size of 1600 x 1200 pixels is created. Draw the picture again now (button "Draw" in the tool bar as usual).
In the preferences dialog (menu item "File/Preferences ...") enter in the drop down list "Downscale Image When Exporting to" the value 25 % and leave the dialog. Now save the image with "File/Export Image As ...".
Fig. B25: Finished image, downscaled to 400 x 300 Pixel

# C. Short Introduction into the Mathematical Aspects

The following sections give a (very) little background information on the techniques used for generating the fractal images.

## 1. Iterations

If you calculate an iteration, you do the same procedure several times and use the result of that procedure as input for the next. E. g. you could decide to add a constant to a number repeatedly. Say, your first number is 0, and your constant is 1.2. You will get the sequence 0, 1.2, 2.4, 3.6, ... and so on. Let us write it a little more formal:
r0 = 0
r1 = r0 + 1.2 = 0 + 1.2 = 1.2
r2 = r1 + 1.2 = 1.2 + 1.2 = 2.4
r3 = r2 + 1.2 = 2.4 + 1.2 = 3.6
...
And shorter:
r0 = 0, c = 1.2
rn = rn-1 + c
You may do this iteration as long as you want to stop, e. g. if rn has reached a value greater than 4.
Look at the following little different iteration formula as another example:
r0 = 0, c = 1.2
rn = rn-12 + c
In other words: Choose as start value 0 and as constant 1.2 again. To calculate the next value square the predecessor and add the constant.
This results in the following sequence as you easy can compute: 0, 1.2, 2.64, 8.17, ...
If we choose c = 0.5 the sequence is: 0, 0.5, 0.75, 1.06, 1.63, 3.15, 10.44, ...
If we choose c = -2 the sequence is: 0, -2, 2, 2, 2, 2, ...
We state as an interesting result: In the first case the fourth number (8.17) is greater then our limit 4, in the second case the seventh number (10.44) is greater than 4, in the third case we never reach our limit 4! This depends obviously on the constant c and/or the start value r0.
How could we visualize this result? We give each number a color (e. g. 4 = green, 7 = red, never = black) and draw a point of this color for each c-value onto an axis:
Fig. C1: Real axis with c-values
On this picture the dots say immediately to us:
"Hello, I am the c-value -2, and I never reach your limit, therefore I am black."
"Hello, I am the c-value 0, and I need 4 iterations to reach your limit, therefore I am green."
"Hello, I am the c-value 0.5, and I need 7 iterations to reach your limit, therefore I am red."

## 2. Complex Numbers

To understand what can be seen in the fractal pictures generated by FCM you need a little imagination what complex numbers are. Complex numbers are an extension of real numbers. As you may remember real numbers are the combination of rational (the set of all fractions) and irrational (algebraic and transcendent) numbers. But real numbers have a disadvantage: You can not get roots of negative numbers because the product of two negative numbers is always a positive number [what could be the root of -2? No, -1.41*(-1.41) results in +2!]. Complex numbers overcome this by introducing the "imaginary unit" i, which is defined to be the root of -1, or in other words i2 = -1.
A complex number z has the form z = a + bi with real numbers a and b. a is the real part and b is the imaginary part of z. Important for us are three aspects:

1. A complex number can be drawn as a point into the so called complex plane.
2. There are rules to calculate with complex numbers, especially you can add and multiply them.
3. A complex number has a distance from the origin in the complex plane.

### a) The Complex Plane

As an example let's look at a complex number z1 = 3 + 2i. You can locate this number in a Cartesian coordinate system at position (3, 2). The horizontal axis is used to display the real part, the vertical axis the imaginary part of the number:
Fig. C2: The complex plane
Also you can see in Fig. C2 the absolute value (distance from z1 to the origin), it is signed with |z1|, and another complex number z2 = 2 - 1i.

### b) Calculation Rules

How do you calculate with complex numbers? This is as easy as with normal real numbers; just keep in mind that i*i = -1. We need only to multiply and to add complex numbers for our iteration described below. The rules for these operations with a complex number z1 = a + bi and another z2 = c + di are:
Addition: z1 + z2 = a+bi + c+di
= a+c + (b+d)i
Multiplication: z1 * z2 = (a+bi)*(c+di)
= a*c + a*di + bi*c + bi*di
= a*c + a*di + bi*c + b*d*i*i
= a*c + a*di + bi*c + b*d*(-1)
= ac-bd + (ad+bc)i
And the absolute value is defined to be:
_____
|z| = a2+b2
As an example let's multiply the numbers of Fig. C2: z1 = 3+2i and z2 = 2-1i:
z1 * z2 = (3+2i)*(2-1i)
= 3*2 - 3*1i + 2i*2 -2i*1i
= 6 - 3i + 4i - 2i*i
= 6 + i + 2
= 8 + i
And the absolute value of z1 is for example:
_______ ___
|z1| = 32 + 22 = 13 = 3.61
[For the sake of completeness: The complex roots of -2 are (0 + 1.41 i) and (0 - 1.41 i), because
-1.41 i * -1.41 i = 1.41 i * 1.41 i = 2*i2 = -2.]

## 3. The Mandelbrot Set

Let's look at an iteration with complex numbers. We could use the same iteration formula as in section C.1 with a complex start value z0 and a complex constant c, e. g.:
z0 = 0 + 0i, c = -1.3 + 0.8i
zn = zn-12 + c
In the same way as above we can ask "how many iterations we will need till the absolute value of zn is greater than 4?". And this is what you can see in a Mandelbrot picture generated by FCM! (To be exactly: The limit is 2.45 instead of 4.)
In such a picture you can see the complex plane, each point of it is interpreted as a different c-value. The plane is scanned point for point and line for line, and the iteration is calculated for each point (= c-value). Each point delivers the number of how many iterations are necessary to get an absolute value for z greater than 4. Each number is associated with a color, and the pixel corresponding to the c-value is painted in this color.
Now there are some points for which the absolute value will never become greater than 4. These points are colored with black, and all of these points are the Mandelbrot set:
Fig. C3: Mandelbrot set
All black points build a characteristic shape as you can see in Fig. C3. The shape's crumpled boundary is a typical fractal structure: If you take a magnifying glass and look more closely at it, you will find that it looks exactly as crumpled as without the glass. Try it out by zooming into the plane with FCM. You will discover a universe of bizarre structures, and all comes out of that simple iteration!
By the way, the set is named after Benoit B. Mandelbrot, a Polish-American mathematician.

## 4. The Julia Set

The Julia set is built by the same iteration formula as the Mandelbrot set. The difference is: You don't see the c-plane but the z-plane, and the constant c is fix for all calculated points.
That means: An arbitrary complex constant c is chosen. Then the complex plane is scanned, again point by point, line by line. Each point is interpreted now as the start value z0 and not as c. The iteration is performed exactly as in the Mandelbrot set. Of course, the result is different and depends on the chosen value c:
Fig. C4: Julia set, c = -0.8 + 0.2i
The Julia set has its name from the French mathematician Gaston Julia.

# D. Appendix

## 1. Known Bugs

- Sometimes the "Out of memory" error is displayed only on the console output and not in a message box as it should be (it seems I don't catch all out-of-memory exceptions).

## 2. Known Shortcomings

- There is no undo function.
- The system clipboard is not supported.
- Multi-core processors have no special support.
- A bug in Internet Explorer 7 causes the help page to be opened always at the beginning of the file instead at the correct position. Workaround: Install Firefox e. g. and choose it as help browser with menu item "File/Preferences ...".

Error reports and suggestions for improvement are highly welcome. Please, write to fs@friedemann-seebass.de.

## 3. Change Log

4 June 2006: V.0.80:

- First published release.

2 July 2006: V.0.90:

- New animation menu.
- Some changes in the user interface.

2 August 6 2006: V.1.00:

- German user interface available.
- List of skins is built dynamically; under Linux there is additionally the skin "GTK" therefore.
- Some minor bug fixes.

13 August 2006: V.1.10:

- The menu items "Restart FCM in German" and "Restart FCM in English" are working in Linux too.
- Picking is possible with the keyboard.
- Handling of zooming improved.

31 January 2007: V.1.20:

- An image can be moved by dragging it with the mouse.
- The max. memory for the Java VM can be set for a restart.
- Memory usage can be displayed in the program window.

11 February 2007: V.1.30:

- The dialog "Image Geometry" was not shown completely and recalculated the imaginary borders by its own with JRE 1.6. These bugs are fixed.
- Images and clips can get another pixel size when loaded as they had when saved.
- In dialog "Preferences" you can select the new flag "Confirm closing FCM".

26 October 2008: V.2.00:

- Different color gradients possible.
- Color gradient editor.
- Supersampling in the iteration space.
- Downscaling of images for quality improvement (anti-aliasing).
- Key frames for creating animations.
- Integration of MEncoder for creation of AVI- and MPEG-videos.

20 March 2009: V.2.10:

- New navigation commands "Go To Next Key Frame" and "Go To Previous Key Frame".
- FCM plays a sound when finishing operations.
- The Stop button works reliably again also with newer Java Runtime Environments.
- Clicking on the border output of a picture in the status bar displays a rectangle in all open windows, symbolizing the size and position of the actual window. So it is easy to find the actual cutting of a zoom in a bigger image.
- Clicking on the Julia constant of a Julia image in the status bar displays the Julia constant of the actual image in all open windows.
- Minor bug fixes.

5 February 2010: V.2.11:

- In the drop down list for the VM memory in the "Preferences" dialog there are now defaults up to 8 GB.
- Optimization when loading clips: Only the colors are recalculated if the other image parameters are the same.
- New menu item for concurrent loading and exporting the images of a clip.
- New menu item "Animation/Adjust Frame Rate ..."; it allows to adjust comfortably the frame for a clip as a whole.

27 February 2010: V.2.12:

- The new menu item "File/Open Clip But Export Each Image As ..." was not translated in the German version.
- File dialogs propose a file extension now if unambiguously possible.

## 4. Other Fractal Generators

There are some other free fractal generators available in the net which I like:

- ChaosPro (www.chaospro.de):
  Enormous functionality, most different fractal algorithms.
- Fractalizer (www.fractalizer.de):
  Creates only Mandelbrot sets, but with the best image quality of all fractal generators known to me.
- Fractint (spanky.triumf.ca/www/fractint/fractint.html):
  The classic fractal generator, user interface needs getting used to nowadays because its not graphical but text based.
- XaoS (xaos.sf.net):
  Different fractal algorithms, zooms into the images in real time!