Skip to the plate
FORMA PUBLIC DOMAIN GENERATIVE ATLAS / ED. 0.28
Plate 11, Hénon Map: a still of the map / quadratic plate as the atlas renders it, in the attractors accent.

PL. 11  ·  ATTRACTORS / MAP / QUADRATIC

Hénon Map

Michel Hénon, 1976

OPEN THE LIVE PLATE ▸

DEFINITION

xₙ₊₁ = 1 − a·xₙ² + yₙ
yₙ₊₁ = b·xₙ

NOTES

Hénon built this deliberately as the simplest possible map with a strange attractor — a stripped-down stand-in for a slice through the Lorenz system. Zoom into any part of the arc and you find it is not a line at all but a Cantor set of lines, all the way down.

PROVENANCE

Origin
M. Hénon, Comm. Math. Phys. 50, 1976
Standing
Public domain — an iterated map
Constants
a=1.4, b=0.3 is the canonical pair
Source
doi:10.1007/BF01608556

HOUDINI · VEX

The same published mathematics as a Detail Wrangle body. Paste it into a Wrangle with Run Over set to Detail; every constant is the published value plus a tweak channel, so Create Spare Parameters gives a slider that starts where the paper does.

// FORMA — PL. 11 · HÉNON MAP — Michel Hénon, 1976
//   xₙ₊₁ = 1 − a·xₙ² + yₙ
//   yₙ₊₁ = b·xₙ
// Paste into a Detail Wrangle (Run Over: Detail), no inputs needed.
// Written from the published mathematics, not adapted from any code.
// Constants arrive at their published values. Press the node's Create
// Spare Parameters button and every tweak becomes a slider — starting
// at 0, the published figure, and moving in the constant's own units.
// https://forma-gen.com/#plate=henon

float p_a = 1.4 + chf('a_tweak');     // a · live 1 .. 1.42
float p_b = 0.3 + chf('b_tweak');     // b · live 0.1 .. 0.4

// The plate's own colour: FORMA's ATTRACTORS accent as a cosine ramp,
// brightest near t = 0 and t = 1, near-black around t = 0.5.
vector forma_ramp(float t){
  return set(
    0.0956 + 0.1039 * cos(6.28318530718 * (t + 0)),
    0.4041 + 0.4392 * cos(6.28318530718 * (t + 0.05)),
    0.46 + 0.5 * cos(6.28318530718 * (t + 0.1)));
}

// The exposure replayed as a point cloud: iterate from (0.1, 0.1) and discard
// the first 20 landings, as the plate's expose() does. The attractor is a
// thin crescent — covering little of its box is its published shape.
int forma_pts  = 120000;
int forma_skip = 20;

float x = 0.1, y = 0.1;
for (int i = 0; i < forma_pts + forma_skip; i++){
    float nx = 1.0 - p_a * x * x + y;
    float ny = p_b * x;
    x = nx;  y = ny;
    if (i < forma_skip) continue;
    // canvas y runs down; negated so the figure sits as the plate shows it
    int pt = addpoint(0, set(x, -y, 0.0));
    float u = float(i) / float(forma_pts + forma_skip);
    setpointattrib(0, "Cd", pt, forma_ramp(0.8 + 0.3 * u));
}