FractalPark
Burning ShipEasy

Burning Ship

A quadratic escape-time fractal: fold both coordinates with absolute values before squaring, and the color bands form an asymmetric ship-like outline.

Open in Explorer
Burning Ship fractal: dark main hull, flame-colored escape bands
The Burning Ship: a wedge-shaped hull, flame-like ridges above the real axis, and layered escape-time bands.

Overview

The Burning Ship stands close to the Mandelbrot set, but one move changes everything. Before each square, it replaces both the real and imaginary parts of z with their absolute values. The orbit folds toward the axes, and the quadratic map loses its rotational symmetry. The map is no longer analytic—it does not satisfy the Cauchy–Riemann equations—and hard corners appear along its edge.

Use the usual display convention, with the real axis horizontal and the imaginary axis inverted, and the fold suggests a burning ship. A wedge-shaped hull sits below flame-like ridges. Along the real line to the left, smaller ships repeat the same jagged profile.

The usual escape-radius test still works: once |z| exceeds 2, divergence is certain. Yet this non-analytic orbit no longer behaves like a complex-analytic function. Its escape-time bands stack into hard-edged layers and nested rectangular boundaries instead of the Mandelbrot set’s smooth radial gradients.

The Mathematics

Fold, then square

z(n+1) = (absolute real z(n) + i times absolute imaginary z(n))^2 + c

Both real and imaginary components are reflected to nonnegative values, combined into a complex number, then squared. In expanded form, the real part is xₙ₊₁ = xₙ² − yₙ² + Re(c) and the imaginary part is yₙ₊₁ = 2|xₙ||yₙ| + Im(c). At every iteration, the absolute values fold the orbit back toward the axes: if xₙ or yₙ is negative, it is mirrored to positive before the squaring step. That fold produces the sharp, rectangular boundaries that set the Burning Ship apart from the Mandelbrot set’s smooth contours.

Try c = −1. For the Mandelbrot set, the orbit z₀=0, z₁=−1, z₂=0, z₃=−1, … stays bounded (period 2). For the Burning Ship, z₁ = (|0| + i|0|)² − 1 = −1, then z₂ = (|−1| + i|0|)² − 1 = 0, and the orbit settles into the same 2-cycle. Now take a point such as c = i: the fold redirects its orbit where the Mandelbrot iteration would not, producing a different escape decision.

History

In 1992, Michael Michelitsch and Otto E. Rössler first described and rendered the Burning Ship in a Computers & Graphics paper. Both were then researchers at the University of Tübingen (Eberhard Karls Universität Tübingen). Their paper gave the iteration and showed that the absolute-value fold produces what they called a “quasi-Julia set”: it resembles a classical Julia set, but arises from a non-analytic map.

The name “Burning Ship” comes from a close view near the real axis: a dark hull below, flame-like ridges above. Paul Bourke independently implemented the fractal in October 1993, crediting Michelitsch and Rössler; his page became an early online reference.

Because it is a non-analytic alteration of the Mandelbrot recurrence, the formula falls outside the classical complex-dynamics theory Fatou and Julia developed for analytic functions. It has since become one of the most widely explored non-analytic escape-time fractals. Buffalo, Airship, Celtic, and Perpendicular variants rearrange which coordinates are folded and when.

Visual Characteristics

Dark hulls, flame-like masts, and chimney shapes rise through folded layers. Set beside the Mandelbrot set, the asymmetry is immediate.

Remix and Examples

Start from the canonical Document

Open the same approved formula state used by this guide, then change the view, coloring, transforms, or animation in the interactive Explorer.

Frequently Asked Questions

What changed from the Mandelbrot set?

Taking absolute values component by component breaks the Mandelbrot set’s rotational symmetry and makes the map non-analytic. Rounded boundaries become angled edges and nested rectangles; escape-time color settles into bands rather than smooth radial gradients.

Why is the ship sometimes upside down?

The canonical formula puts the ship upside down because absolute values turn negative imaginary coordinates positive before squaring. Most renderers, including FractalPark, reflect the image vertically for display. A screen whose Y-axis points down can add a second flip, so the final orientation depends on where the renderer applies that reflection.

References

Source walkthrough

  1. frm-v1:cfef49944d8f9bd8f2ee91b2d4ab4f9b30ad66475a6f783f52bb91a7a36b1617:init/0

    In burningShip, this node executes if ismand: z = 0; otherwise z = pixel.

  2. frm-v1:cfef49944d8f9bd8f2ee91b2d4ab4f9b30ad66475a6f783f52bb91a7a36b1617:loop/0

    In burningShip, this node executes a = abs(z).

  3. frm-v1:cfef49944d8f9bd8f2ee91b2d4ab4f9b30ad66475a6f783f52bb91a7a36b1617:loop/1

    In burningShip, this node executes if power == 2: real(z) = real(a) * real(a) - imag(a) * imag(a); imag(z) = 2 * real(a) * imag(a); then z = z + c; otherwise z = a ^ power + c.

  4. frm-v1:cfef49944d8f9bd8f2ee91b2d4ab4f9b30ad66475a6f783f52bb91a7a36b1617:bailout

    In burningShip, this node executes |z| <= 256.

Syntax features

state-flow

These annotations trace the formula-specific state flow: if ismand: z = 0; otherwise z = pixel; a = abs(z); if power == 2: rebuild z from a’s components and add c; otherwise z = a ^ power + c.

stopping-test

This annotation is the stopping test, |z| <= 256, rather than a state update.

Parameter experiment

power

Steps

  1. Run burningShip with the pinned profile and record the result.
  2. Change only power, keep every other runtime slot and profile control fixed, run again, and record whether a difference occurs.

What to observe

Record whether a = abs(z); for power == 2 it rebuilds z from real(a) and imag(a) before z = z + c, otherwise z = a ^ power + c produces a visible-result or |z| <= 256 stopping-behavior difference from the baseline; the pinned definition does not guarantee a difference.

Exercise

Trace burningShip through its annotations, explaining the source operation a = abs(z); for power == 2 it rebuilds z from real(a) and imag(a) before z = z + c, otherwise z = a ^ power + c and the stopping test |z| <= 256.

Completion check

Your trace explains all 4 annotations for burningShip, including a = abs(z); for power == 2 it rebuilds z from real(a) and imag(a) before z = z + c, otherwise z = a ^ power + c, and distinguishes |z| <= 256 from a state update.

Sources and rights

This teaching unit is grounded in runtime:cfef49944d8f9bd8f2ee91b2d4ab4f9b30ad66475a6f783f52bb91a7a36b1617 and decision:2ab193f5-4919-5e5c-a9fb-c1a0e3f5eb02.

rightsStatus is project-owned; implementationBasis is project-owned; publicationDecision is publish; decisionReason is publish-project-owned-native-recipe. This statement does not make broader claims about any third-party original.

Formula Record

burningShip

This canonical FractalPark implementation is published and runnable.

Deterministic preview of burningShip

Canonical source

Language
frm-like/1
Standard library
1
Profile mode
parameter-plane
Profile center
-0.5, 0
Profile zoom
0.4
Profile iterations
96
Profile evidence
mechanical

Parameters

  • power: real

Canonical source

This verified canonical revision is read-only. Remix creates a separate editable fork.

Loading canonical source…

Source and implementation

Formula ID
2ab193f5-4919-5e5c-a9fb-c1a0e3f5eb02
Canonical name
burningShip
Original name
burningShip
Historical source
FractalPark
Current implementation
Project-owned

This is a FractalPark project-owned implementation. The linked file is the pinned canonical Definition.

Rights or attribution concern?

Send the Formula ID and supporting evidence. The maintainer can hold or withdraw the implementation while the claim is reviewed. contact@fractalpark.com