Walking between two entries — tuple_from, tuple_to, and morph
tuple cuts. To travel between two figures instead, name a path in
[particles] and drive it with morph — the same key, and the same meaning, it
already has on an IFS:
[particles]family = "thomas"tuple_from = 5 # the near end (optional; entry 0 by default)tuple_to = 8 # the far end — this key is what turns the walk on
[params]# a slow round trip, about 48 smorph = "0.5 - 0.5 * cos(time * 0.13)"| Key | Meaning |
|---|---|
tuple_to | Far end of the path, a roster index. Absent, there is no path and morph is inert — which is every preset that does not ask for one. |
tuple_from | Near end. Defaults to entry 0. |
morph | Position along the path, 0..1. Continuous — this is the one place in the attractor’s surface a param is not quantized. |
Five things that are not guessable:
- The middle is measured, not averaged. The engine samples the figure’s
framing at nine positions across the pair at load, because a figure halfway
between two tuples is a figure in its own right and its extent is only
coincidentally the mean of its endpoints’. The ends keep the framing the
roster already measured, so
morph = 0renders exactly the entry it names — which is what makes a path safe to add to a preset that already works. tuplegoes inert while a path is configured. A preset either steps the roster or walks a path. Both ends are structural because measuring the walk is thousands of map iterations; a near end that moved per frame would re-measure inside the frame loop.- Not every pair has a walk. A tuple partway between two others can collapse
to a fixed point, whose extent is zero and which has no scale to render at.
The engine then refuses the path and the preset sits on its near end with
morphdoing nothing. Of twenty pairs swept, four were refused this way — all on the two discrete maps. If yourmorphdoes nothing, this is the first thing to suspect. - Do not put
morphin[smoothing]. The binding is already a slow curve and easing an ease only lags it. The walk’s smoothness is the mechanism’s. - A far end may need time to settle. Where the target is a periodic
attractor — the rho ≈ 100 knot is one — a cloud arriving along the walk is
still falling onto it for several seconds after
morphreaches1.
Four paths ship, each judged in motion:
thomas 5→8 (Thomas Walk), lorenz 0→1 (Butterfly to Knot), lorenz 0→4
(Rho Walk), de_jong 1→3 (De Jong Walk). The one-dimensional sweeps are the
strongest case: neighbouring a or rho values are neighbouring figures.
Each family is viewed in its own plane, and it matters the moment you reach
for zoom or pan_*, because those aim at the figure the plane produces:
| Family | Dimensions | Viewed in | The spin turns x against |
|---|---|---|---|
de_jong | 2-D map | x–y | — (in-plane rotation) |
clifford | 2-D map | x–y | — (in-plane rotation) |
thomas | 3-D flow | x–y | z |
lorenz | 3-D flow | x–z | y |
| the five IFS figures | 2-D IFS | x–y | — (in-plane rotation) |
Lorenz is the exception, and it is one deliberately: its butterfly lives in x–z, and viewed x–y the two lobes are edge-on — a hard X that reads as a dense core inside a diffuse cloud rather than as a figure (ADR-0068). Thomas is 3-D too and keeps x–y, so the plane is a per-family property, not something you can infer from the dimension count.
One consequence to author around: the 3-D families spin as a turntable about the vertical axis, so a quarter turn necessarily leaves the family’s own plane. Lorenz reads as the butterfly near 0° and 180° and as a low-structure cloud near 90° and 270° — the plane buys the shape, not the shape at every angle.
Built from 13c7582 at version 0.158.0. This site tracks main and is not versioned per release.