User Rating 0.0 β˜…β˜…β˜…β˜…β˜…
Total Usage 0 times
Re: 0, Im: 0
300
100%
Center: -0.4, -0.6 Span: 3.5
Drag: PanScroll: ZoomDbl-click: Zoom inR: ResetP: Palette+/−: ZoomArrows: Pan
Is this tool helpful?

Your feedback helps us improve.

β˜… β˜… β˜… β˜… β˜…

About

The Burning Ship fractal is generated by iterating zn+1 = (|Re(zn)| + i|Im(zn)|)2 + c over the complex plane. The absolute value operation on real and imaginary parts before squaring breaks the symmetry found in the standard Mandelbrot set, producing asymmetric structures that resemble burning ships and other chaotic formations. Insufficient iteration depth produces false convergence: regions that appear "inside" the set may actually escape at higher counts, distorting the boundary. This tool computes escape-time values in a Web Worker to avoid UI thread blocking, applies smooth iteration normalization via log2(log2(|z|2)), and maps results through cyclic HSL palettes. Coordinates and zoom state persist across sessions.

Computation cost scales linearly with pixel count and iteration cap. At deep zooms beyond 1014, IEEE 754 double-precision introduces rounding artifacts. This renderer uses standard 64-bit floats, so visual accuracy degrades past approximately 13 decades of magnification. For most exploratory purposes this limit is not reached.

fractal burning ship complex plane mandelbrot variant math visualization interactive explorer escape time

Formulas

The Burning Ship fractal belongs to the family of escape-time fractals. Each pixel maps to a point c = cre + i cim on the complex plane. The recurrence relation is:

zn+1 = (|Re(zn)| + i|Im(zn)|)2 + c

Expanding the squared term with xn = |Re(zn)| and yn = |Im(zn)|:

xn+1 = xn2 βˆ’ yn2 + cre
yn+1 = 2xnyn + cim

Iteration continues until xn2 + yn2 > 4 (escape radius squared) or the iteration count n reaches the maximum. For smooth coloring, the normalized escape count is:

nsmooth = n + 1 βˆ’ log(log(xn2 + yn2))log(2)

where n = discrete escape iteration, xn, yn = final coordinates at escape, cre, cim = real and imaginary components of the pixel's complex coordinate, and the escape bailout radius is 2 (squared check: 4).

Reference Data

LandmarkCenter ReCenter ImZoomMin IterationsDescription
Full Viewβˆ’0.4βˆ’0.63.5100Complete fractal overview showing main ship body
Main Antennaβˆ’1.756βˆ’0.0280.05300Filament extending left from the hull
Bow Detailβˆ’1.694βˆ’0.00030.005500Fine structure at the ship's prow
Stern Spiral0.82βˆ’1.280.15200Spiral arm near lower right
Mini Shipβˆ’1.762βˆ’0.0280.008500Self-similar copy embedded in antenna region
Upper Mastβˆ’0.4βˆ’1.30.3200Vertical structure above main body
Hull Crackβˆ’1.0βˆ’0.150.2250Branching fracture line along the hull
Keel Spikeβˆ’0.5βˆ’0.20.1300Sharp protrusion beneath main body
Wake Regionβˆ’1.5βˆ’0.050.15300Turbulent boundary west of hull
Crow's Nestβˆ’0.3βˆ’1.50.08400Isolated detail above the mast
Portholeβˆ’0.1βˆ’0.650.05350Circular feature on the hull surface
Deep Zoom Filamentβˆ’1.7611βˆ’0.02830.00011000Requires high iteration count for resolution

Frequently Asked Questions

The critical difference is the absolute value operation applied to the real and imaginary parts of z before squaring. In the Mandelbrot set, z_{n+1} = z_nΒ² + c preserves the sign of both components, producing symmetric structures. The Burning Ship applies |Re(z_n)| and |Im(z_n)|, which folds the complex plane along both axes at every iteration. This folding creates the characteristic asymmetric, angular structures and the ship-like silhouette. The operation is non-analytic (not complex-differentiable), which is why the boundary lacks the smooth rotational symmetry of the Mandelbrot set.
Iteration count must scale roughly with the logarithm of the zoom factor. At the default overview (zoom span β‰ˆ 3.5), 100-200 iterations suffice. At 10⁴× magnification, 500-800 iterations are typical. At 10⁸×, you may need 2000-5000. Insufficient iterations cause boundary detail to collapse into uniform color bands. This tool caps at 5000 iterations; beyond that, computation time per frame on a single Web Worker exceeds acceptable thresholds for interactive use.
JavaScript uses IEEE 754 double-precision floating point, which provides approximately 15-16 significant decimal digits. When the viewport span shrinks below roughly 10⁻¹³, adjacent pixels map to the same floating-point value, producing rectangular artifacts. This is a fundamental precision limit, not a rendering bug. Arbitrary-precision libraries or perturbation theory (not implemented here) can extend the useful zoom range by several additional orders of magnitude.
Without smoothing, each pixel is colored by its integer escape iteration, creating visible banding. Smooth coloring computes a fractional iteration count: n_smooth = n + 1 βˆ’ logβ‚‚(logβ‚‚(|z|Β²)). This maps escape values to a continuous range, allowing gradient interpolation across the palette. The logβ‚‚(logβ‚‚()) term normalizes the exponential growth of |z| near the escape boundary. The result is visually continuous color transitions that reveal fine boundary structure otherwise hidden by discrete bands.
The traditional orientation plots Re(c) on the horizontal axis and Im(c) on the vertical axis with Im increasing downward. In this convention the ship appears upright with the hull at bottom and masts pointing up. Some renderers flip the imaginary axis, inverting the image. This tool uses the mathematical convention (negative Im downward), which shows the ship in its commonly recognized orientation. No rotation transform is needed.
A 1920Γ—1080 canvas at 500 iterations requires up to 1,036,800,000 floating-point operations (1920 Γ— 1080 Γ— 500 Γ— ~2 multiplications + additions per iteration). Running this on the main thread blocks all UI events - scrolling, clicking, and even browser tab responsiveness - for several seconds. The Web Worker runs on a separate OS thread, keeping the UI responsive. Progress is reported back via postMessage so the progress bar updates in real time.