### Basic Usage

Simply select a formula from the dropdown list and click the "Reset" button (or press Enter on the keyboard).

### Zooming

Using the mouse or trackpad, drag a selection box over the part of the image that you want to view more closely. When you release the mouse button (or lift your finger from the trackpad), a zoomed-in view with your selection centered in the canvas will be shown.

#### Zooming out

To return to your previous view, click on the button. If you are at the 1:1 zoom level, clicking the button will zoom out by a factor of two each time (1:2, 1:4, etc.). This can be useful when the fractal does not fit into the default viewport.

#### How deep can you go?

The zoom depth is limited by the resolving power of 64-bit double precision numbers - around twenty trillion to one. At a certain level, the numbers represented by each pixel are no longer distinguishable from each other and things get kinda messy. The application attempts to detect when this is likely to happen and stops you zooming any deeper. You can then try a bigger selection box or go and explore something else. Deeper zooming using arbitrary precision arithmetic is not practical in JavaScript (how long do you want to wait for an image to render? Five days? Thought not) and will require an offline application and lots of patience.

### Reporting

When the image has finished rendering, the application reports on the area of the complex plane represented by the viewport, the current zoom level and how long the image took to render (the latter is mainly for me to keep an eye on performance). The real number line goes from left (negative) to right (positive). The imaginary number line goes from top (positive) to bottom (negative). This means that the top left of the viewport is given by minimum real value / maximum imaginary value, while the bottom right is given by maximum real value / minimum imaginary value.

### Switching to a Julia Set

Three of the formulae, Mandelbrot set, Multibrot set and Burning Ship fractal have associated Julia set types: Quadratic Julia set, Polynomial Julia set and Burning ship Julia set respectively. When you've selected a Mandelbrot-type fractal, you can hold down the shift key and click on a point in the image to view the Julia set corresponding to that point in the complex plane. To return to the Mandelbrot fractal, click the "< Back" button.

### Exporting an Image

When you see an image that you want to keep, click on the button. This will open the image in a new browser tab from where you can save it to disk. If you are using Firefox, you can right click on the canvas and save the image directly.

### Fractal Parameters

Most of the fractal formulae have parameters that you can modify to (radically) change the image displayed. When you change a parameter value, you will have to click Reset to apply the new value.

#### Entering complex numbers

All of the parameters apart from "Exponent" accept complex / imaginary values. For the imaginary part, you use i to represent the imaginary unit and specify complex numbers in rectangular form: 2+i or 1.5-0.5i. If you don't want to specify a real-part, you don't have to: you can simply use 2i or -i.

#### Julia constant

Most of the fractals are created by repeatedly applying the transform:

`z → f(z) + c`

For the Julia sets, the c value is supplied via the Julia constant parameter. Applicable fractals are: Quadratic Julia set, Polynomial Julia set, Rational map, Phoenix fractal and Burning ship Julia set.

#### Exponent

The transform is:

`z → zP + c`

P is specified by the Exponent parameter. This can be a positive integer, a negative integer or a real value. It cannot be a complex or imaginary value. Applicable fractals are Multibrot set and Polynomial Julia set.

#### Rational map parameters

The Rational map formula is:

`zk+1 = zkP + c - λzk-Q`

It has three parameters unique to the formula: two exponents (corresponding to P and Q) and a constant multiplier for the reciprocal term. The first exponent must be >= 2 while the second must be < 0. In addition, they must be integer values (I've not programmed support for real values). The λ parameter can be an arbitrary complex value.

The fractal generation library will raise an error during the initialization phase if P < 2 and/or Q >= 0

#### Polynomial terms

The convergent formulae create fractal images by "solving" polynomial equations of the form:

`mnzn + mn-1zn-1 + ... + m2z2 + m1z + m0 = 0`

The coefficients of the equation are specified via the Polynomial terms parameter, with the highest order term first. Each coefficient may be real, imaginary or complex. You must specify as many terms as the order of the equation to be solved:

`0.5,0,0,0,2-i → 0.5z4 + 2-i = 0`
The fractal generation library will raise an error during the initialization phase if you don't specify an equation of at least order 2

Applicable fractals are Newtonian fractal and Nova fractal.

#### Relaxation parameter

The generalized form of the Newton-Raphson method of equation solving is:

`z → z - R·f(z) / fʹ(z)`

R is the relaxation parameter. It is used mathematically to improve the convergence rate of the method. For generating fractals, it is a more productive parameter than randomly tinkering with the polynomial terms.

The fractal generation library will raise an error during the initialization phase if you specify a relaxation parameter of 0

Large / negative values of R don't lead to particularly meaningful images from a mathematical viewpoint, since they tend to produce NaNs in the fractal library. They can, however, lead to "happy accidents". Applicable fractals are Newtonian fractal and Nova fractal.

#### Start value

The Nova fractal is formed by a Mandelbrot-style iteration applied to the Newton-Raphson method. For a Mandelbrot-style iteration, z0 is usually c, but for the Nova fractal it is a fixed value specified by the Start value parameter (and you may set "c" as its value). Applicable fractal is the Nova fractal.

#### Phoenix constant

`zk+1 = zk2 + P·zk-1 + c`

P is a constant value supplied by the Phoenix constant parameter. Applicable fractal is (surprise!) the Phoenix fractal.

### Sharing Images

If you've created something truly awesome, there is no need to keep it to yourself. Click on the "Share" link to pop up a dialog containing a URL that you can copy and distribute. Following this URL will result in exactly the same image that you can see.

The advanced options allow you to tweak internal values that control the appearance of the fractal image. Most of the options are properties of the individual fractal definitions. Any changes that you make will only last until you change the Fractal formula. Any invalid values that you enter will be silently ignored.

#### Visualization

##### Select the palette

Change the colours used to display the fractal image.

The colouring options are not applied to the Nova fractal which is always coloured by iteration count.
##### Colour the set exterior by iteration value

The iteration function is applied until the value at a pixel meets an escape condition (or not). The iteration count is used to look up a palette value using either the normalized iteration count algorithm (divergent fractals) or exponential smoothing to colour the exterior continuously.

##### Don't colour the set exterior

This will show only the set boundary and will allow you to see the underlying fractal structure.

##### Colour the basins of attraction (Newtonian fractal only)

Colour the exterior set by the root a given point converges to. As should be obvious, this option is only relevant for the Newtonian fractal and will be ignored if the relaxation parameter prevents convergence.

##### Reverse the colours of the set boundary and interior

By default, the set interior is coloured white and the boundary is indicated by darker tones. Selecting this option will cause the boundary to be indicated by lighter tones while the set interior is coloured black. The change to boundary colouring is achieved by reversing all colours. If you are not creating a white boundary on black background you can fix this by selecting one of the "negative" palettes. Note that a white boundary combined with exterior colouring can lead to an unattractive "blooming" effect.

##### Rotate colours by...

Changes the colours by changing the hue values. Hue is specified by an angle around a colour wheel so the value you set here is a value between 0 and 360.

#### Image quality

These options change the quality of the finished image. The default options are good for casual exploration but when you want to save an image you can tweak these values to give you the maximum quality.

##### Escape value

This value must be >= 2 for divergent fractals and < 1 for convergent. By and large changing this value doesn't have too much effect on the finished image. Multibrot / Polynomial Julia set images will be sparser with a larger escape value when the exponent is a negative value. Convergent fractals will render noticeably faster with a larger escape value, but visible blank discs may mar the image. Smaller values will sharpen convergent fractal images at the cost of increased time.

##### Iteration count

Increasing the iteration count will reveal detail in deeply zoomed images that wasn't apparent previously. This comes with two tradeoffs, however. Obviously, the time taken to compute the images will increase. Less obviously, the palette may be visibly recycled. The palette generation algorithm produces at least one colour for the default number of iterations (which is a property of the fractal definition itself). When you increase the iteration count, the algorithm generates more colours in increasing cycles. If the default iteration count is 1000, the first cycle will make 1000 colours, the second cycle 2000, the third cycle 4000, and so on. Despite this, at high zoom and high iteration count, the dwell values may change so rapidly that the colour bands end up very closely spaced and reusing colours becomes apparent.

##### Maximum palette size

A value of 0 results in a palette as large as the iteration count. While having one colour per iteration value helps keep noise under control (since adjacent pixels will have the same or almost the same colour) the image may end up looking flat if most pixels end up in the same colour band. Reducing the palette size may result in a more colourful image.

##### Boundary fraction

Changing this value will emphasize / de-emphasize the set boundary. The fractal algorithms calculate a distance estimate of a point in the complex plane and this is used to adjust the value of the colour in HSV space so that points close to the border are much darker. A smaller value, such as 8, will tend to make the boundary quite prominent. Something like 32 will tend to make the boundary disappear. You are not constrained to powers of 2 and can use real numbers including values between 0 and 1.

##### Image width

Although image height is also shown, you can only directly change the width. The aspect ratio is fixed at 4:3. If you want a different aspect ratio, such as 16:9, select the appropriate width and crop the resulting image yourself. The width value must be an integer multiple of 4. This does not alter the size of the canvas but does change the size of the image produced when you click . If there is an upper limit to the width, I've not had the patience to find it. Obviously, increasing the image size will increase the rendering time proportional to the square of the width. Changes to the image dimensions are persistent - clicking "Reset" will not change them back.

##### Apply anti-aliasing

Anti-aliasing can improve the perceived quality of an image by smoothing out the noisiness caused by adjacent pixels having markedly different colour values. The algorithm applied is Quincunx multisampling. Rendering time is doubled (although the colouring uses five samples per pixel, three are shared with adjacent pixels). This option is persistent between changes in fractal formulae.

#### Viewport

These options allow for precise control of the centre-point and magnification of the image.

##### Shift image left

Allows for fine adjustment of what is displayed by moving the centre-point right along the real axis. The effect is that the image is shifted left. A negative value will shift the image right.

##### Shift image up

Allows for fine adjustment of what is displayed by moving the centre-point down the imaginary axis. The effect is that the image is shifted up. A negative value will shift the image down.

##### Centre point

Allows you to centre the viewport at a desired co-ordinate in the complex plane. You specify the desired location as a complex number in rectangular form (x+yi). If you also apply a pixel shift, any changes to this value will be ignored. Do not change this value at high-zoom level because the value shown in the dialog is rounded to five decimal places. This won't matter if you don't change it. If you do change it, you may well find that you're miles out.

##### Zoom

The zoom tool is not very precise. This control allows you to set the magnification to an exact amount. You may adjust the centre point and magnification at the same time. To zoom out you can use a value between 0 and 1.

#### Palette

This tab allows for total control of the colours in the image either through editing one of the built-in palettes or creating a new one. Use the big edit control to edit your palette. See the palette documentation for details on the palette format.

##### Tweak

Loads the currently selected palette into the edit control for tweaking / rewriting / whatever.

##### Check

Runs a syntax check over the palette text. Before the syntax is checked, blank lines are stripped so if you have blank lines in your palette text the line numbers reported will be off.

##### Clear

Clears any text from the edit control. If you're currently using a custom palette, remember to select a built-in palette to use.

If you have custom palette text and the value in the palette selection control is other than "Custom palette", the custom palette text will take priority.