About Image Forge
Help and About
:................A brief description and related statements.
:....................Suggestions on using the applet.
:.......................An explanation of the menus.
:.......................How to use the mouse with the Mandelbrot and Julia sets.
:..................Description of the Fractal Planet settings dialog.
Mandelbrot and Julia
:....Description of the Mandelbrot/Julia Set settings dialog.
Saving Your Images
:..........A tip on saving the generated images, if you like them.
:..................On the applet's source code.
Bugs and Flaws
:..............Some known problems.
:.....................A log of changes to the applet.
Mandelbrot Set Notes
:........On the Mandelbrot Set.
:..................On this page.
Currently the applet will generate two types of images: a fractal
planet, and the Mandelbrot set with its corresponding Julia sets. The
fractal planet has many variable parameters. The Mandelbrot set can be
examined at smaller and smaller scales with a feature that "zooms
in" on an area that has been selected with the mouse. Also,
single-clicking a point in the Mandelbrot set will cause the Julia set
corresponding to that point to be drawn. When a Julia set is shown,
selections with the mouse will zoom in just as with the Mandelbrot, and
a single click will redraw the Mandelbrot. Selections have no effect
with the fractal planet.
The part of the applet that is embedded in the web-page consists of
four buttons and a text display area. The first three buttons create
new windows in which the images are displayed. The last button on the
right opens a new browser window displaying this web-page. The text
area will show numeric information when the process of generating a new
image has started. Unfortunately, some implementations of Java 1.02
show too few significant digits in a rational number when that number
is converted to text. The result is that you will sometimes see odd
things like a range reported with lower and upper values the same.
Worse than that, fields in the settings
dialogs might not be updated correctly. This problem seems to have
been corrected in Java 1.1, but if you have a Java 1.0 browser you
might notice the problem. (Don't let that stop you, it will still work.)
Note that the applet's "Fractal Planet" generating code is
ported from the program ppmforge that is distributed with the
NetPBM raster image
utilities. Only the syntax and structure have been changed in the
translation to Java: the logic remains unchanged. Credit for the
attractive planet images belongs entirely to the original author.
Please see the comment in ppmforge.c
for the original author's copyright, which gives unconditional
permission to use the code.
Click "New Planet" or "New Mset" to start an
image. A window will appear and begins to draw an image with default
settings. However, the planet generator does some preliminary work,
so there might be a delay before anything is seen its window.
Some of the defaults for the fractal planet are generated randomly,
including time-of-day, so don't be surprised if the default planet turns
out to be invisible -- it's just night! The Mandelbrot set generator always
has the same defaults, but then you can follow any course of successive
magnifications on areas of the set.
You can open a window that waits for your input by clicking "New
Window." When the window opens, you can adjust its size visually with
the mouse or precisely with the
Window->Set Canvas Size
menu. You can select the image type with Image->Type,
or change settings with Image->Settings
Dialogs). To begin drawing the image select
The mouse is used for two operations on Mandelbrot and Julia set
images. A single-click on a completed Mandelbrot set image will start
drawing the Julia set for the point under the mouse hot-spot. This
works regardless of the current scale of the Mandelbrot. When a Julia
set is showing, a click redraws the Mandelbrot at the last scale
rendered. On both Mandelbrot and Julia set images a selection with
the mouse will zoom in on the selected area. Selections are made by
pressing and holding the primary mouse button and dragging the mouse
before releasing the button. Selections are shown by an outline until
the new image draws over that area.
Note that while the Mandelbrot set might be "magnified"
infinitely, this applet's ability to
magnify is not infinite. The applet uses the Java
"double" data type. Eventually the range of that data type is
exceeded. If you notice obvious errors in the image after quite a few
'zooms,' you've hit the limit. However, you will still be able to zoom
in quite a bit before you reach the limit. (If you would like to explore
beyond the limits of this applet, then try
Although a selection can be made on the fractal planet, it will
have no effect (a single click will clear the outline).
The settings dialogs allow you to control several features of the image.
The adjustable items in the dialogs have descriptive labels, and many of
the labels are followed by '<n>' or '<n.n>' to denote an integer
(no decimal point allowed) or rational number (may have a decimal part).
There is a Default button that sets all fields to the program's
original values, a Reset button that clears changes and inserts
the values that were present when the dialog was last opened, a Cancel
button that closes the dialog and ignores any changes, and an OK
button that closes the dialog and accepts any changes.
The Fractal Planet Dialog
Set the size of the image to be drawn. The window will be resized so that
its drawing area has these dimensions. The fractal planet code requires
the width to be equal to or greater than the height, so if the height is
found to be greater, the dimensions are adjusted internally.
Hour: Controls light on the planet, as in hours of the day.
Even though a default value is shown when the dialog is first invoked,
if you don't specify this value it is generated randomly.
Tilt: Controls light on the planet, like the angle between the
equator and the sun. Even though a default value is shown when the dialog
is first invoked, if you don't specify this value it is generated randomly.
Ice: Affects polar ice caps.
Glacier: Affects snow on continents.
Stars, Saturation: Affects number and color saturation
of stars in the space around the planet.
Dimension: Affects the complexity of features.
Power: In effect this controls the proportion of land and water,
with higher values creating more water. Must be non-zero.
Seed: Primes the random number generator. The same seed will
produce the same general features every time. Changing the seed changes
the overall appearance of the planet. Even though a default value is shown
when the dialog is first invoked, if you don't specify this value it is
Mesh: In effect this changes the number features in land masses,
with low values producing continents with fewer features, and higher
values requiring more memory and execution time. This must be a power
of two. The default is probably best.
Clouds: With this selected clouds on a blue sky are drawn instead
of a planet. The image will match on opposite sides, so it can be used
as a tiled pattern.
Night: With this selected a field of stars is drawn without
Mandelbrot and Julia:
The Mandelbrot Set Dialog
: See Width, Height above.
Grid: This field should be renamed. You can use this to make
a 'pad' area around your mouse selections. If this is less than the greater
of the width and height, then the zoom-area will be larger than the area
selected, and vice versa. This might be removed in the future.
Process for z: The Mandelbrot set is generated by an iterative
process z -> z^2 + c. This applet lets you try an
exponent other than 2. The items in this list are z -> z^n,
and z -> z^(2^n). (For brevity " + c" is left
off.) Of course, the second item is redundant, but if you want to try a
power that is a power of two then select the second item and put the appropriate
value in the process degree field. For example, to see z -> z^16 + c
select z -> z^(2^n) and put 4 in the process degree
field. The image will draw faster than z -> z^n with 16 in
the process degree field because of a more efficient algorithm.
Items that are more interesting may be added in the future.
Test loop maximum: Greater values will produce more detailed,
accurate images, but will take much more time. The default is probably
good enough the first few times you zoom in. Soon, the image produced will
be very inaccurate near the set's boundary if this value is too small.
Test lower bound, Test upper bound: In the iterative
process on z, the result in z is tested with each iteration to check if
the value is moving toward infinity. In the default test only the absolute
value of Test upper bound is used. In an alternate test the real
and imaginary components of z are tested against both these values. See
Escape test for z.
Process degree: See Process for z.
Real scale, Imaginary scale: Scaling factors. The defaults
are based on the window (image) size. Used with Real translation
and Imaginary translation, these can be used to specify a region
to be magnified.
Escape test for z: This is how z will be tested for exclusion
from the set. (If it is excluded, the corresponding pixel is colored.)
The first selection in this list is the usual test used, and produces smooth,
curving bands of attraction around the set. The second selection produces
bands with a serrated appearance.
Real translation, Imaginary translation: These move the
view of the set. By default 'real translation' is non-zero to center the
image in the window. If a Process degree other than two is used
or a Julia set is to be drawn, then Real translation should be set
to zero to center the image in the window. Used with Real scale
and Imaginary scale, these can be used to specify a region to be
Color mapping: Methods of coloring the points that have
escaped -- points that are not in the set -- according to the number
of iterations required to determine that the point escaped. The
selections are Static 256 color,
Iteration scaled, and Escape mod 255.
Examples of the the color-mapping methods.
The first row shows the full view of the Mandelbrot set.
The second row shows a magnified view. The first column
shows the Escape mod 255 color-mapping, the second column
shows Iteration scaled
, and the third Static 256 color.
Julia set real: Sets the real component of a point on the complex
plane for generation of a Julia set.
Julia imaginary: Sets the imaginary component of a complex point
for a Julia set.
Mandelbrot set, Julia set: Option buttons to select generation
of a Mandelbrot or Julia set.
Saving Your Images
For security reasons Java applets can't write files on your machine.
A screen capture program can take the image from your screen.
Your windowing system should provide a facility for screen capture.
There are free programs and share-ware that might offer more flexibility
with screen captures, and allow the image to be edited and saved in
a variety of image file formats.
This applet is derived from a Java application that can save the images
in the .PPM format. The .PPM format is a simplified raster image encoding
suitable for streaming image data between processes over pipes, and is
used by the NetPBM
utilities. Most image editors should understand .PPM.
To download the source see
Here is the source for the JDK 1.1 version:
JDK 1.0.2 source code
for the applet and an older JDK 1.1.n application version
Distribution is under the GNU GPL.
Bugs and Flaws
old JDK 1.0.2 version of the applet
had been tested with Netscape Navigator 3.01 on GNU/Linux (x86),
Netscape Navigator 4.03 on GNU/Linux (x86), Netscape Navigator 3.01 on MS
Windows 95, and MS Internet Explorer 3.0 on MS Windows 95.
The list of bugs for that version filled quickly.
This JDK 1.1 version seems to work well in
Netscape Navigator 4.73 on GNU/Linux.
I am not testing in other browsers or on other platforms
at this time.
Bugs and flaws are categorized below as being in applet code, Java,
or the browser. Here is an incomplete list, not guaranteed to be
Math is done with the double data type. The Mandelbrot
set really needs arbitrary precision math, but that is too ambitious for
For the fractal planet generator the width must be equal to or greater
than the height. This remains from the original ppmforge code, which
has been ported but not logically modified.
When run in JDK 1.1.8 appletviewer classes do not load properly
from a .jar archive; therefore the individual classes must be
available and the ARCHIVE tag must not be used.
Java 2 (JDK 1.2.x, 1.3.x ...)
has new security policy defaults, at least with the Sun JDK/JRE.
In particular, one new security restriction on applets pertains
to thread group changes, and the applet does use a thread
constructor with a thread group parameter. As a result, it appears
that the applet does not respond button clicks (which might be
confused with the Mozilla button
problem. Actually, the button clicks lead to thread creation
with the afore-mentioned constructor, raising security exceptions
and stopping the show.
Of course, that is not a bug but a feature. To enable the applet
with a Java 2 browser or plug-in and the new security policy, one
default must be changed. This is not a Java tutorial, but for a
hint start here.
Netscape Navigator 4.73 (X; GNU/Linux):
None identified yet. In fact, it hasn't even locked yet,
in spite of the fact that it does so regularly with
other applets! (The previous statement was premature:
the 4.7x series of Netscape browsers on GNU/Linux certainly
do lock, frequently, with many applets.)
Mozilla beta (0.9.9) (X; GNU/Linux):
Preparing to publish JDK 1.1 version. Change log started.
Mandelbrot Set Notes
The applet is at a new site. The web pages are being revised for
the JDK 1.1 version of the applet. Please excuse any errors.