Orbit Lattice turns a ring-seeded arrangement of 24 points into a responsive field. You place an attractor, vary its strength and disturb the lattice with a pulse. The pleasure is in finding a balance between structure and displacement, rather than completing a level.

Controls

  • Gravity: 0–100%, in steps of 1; initial value 36%. This controls the attractor’s pull. It is a relative parameter, not a calibrated gravitational constant.
  • Send pulse: push points away from the attractor.
  • Reset orbit: restore the initial gravity, centre the attractor and return the nodes and motion state to their starting values.
  • Canvas pointer, pen or touch: press and drag to reposition the attractor.
  • Focused canvas keyboard: Left, Right, Up and Down move the attractor by 0.05 of the canvas width or height. Space sends a pulse; Home resets the lattice.

Tab to the gravity slider, buttons or canvas. Native buttons work with Enter and Space, and the slider accepts the arrow keys. You do not need a pointer to position the attractor or issue a pulse. The attractor stays within the canvas bounds.

Try this

  1. Put the attractor near the centre and reduce gravity. Look for the field’s underlying order.
  2. Move toward an edge and raise gravity. Compare the nearby points with those farther away.
  3. Trigger Send pulse and observe how the disturbance changes the arrangement.
  4. Use the keyboard to place the attractor deliberately, then reset to compare against the starting composition.
flowchart LR
  P[Pointer or arrow keys] --> A[Attractor position]
  G[Gravity control] --> F[Field displacement]
  A --> F
  B[Pulse] --> F
  S[Sine motion] --> F
  F --> C[Generated point lattice]

Motion, not a laboratory model

Sine functions provide bounded oscillations and phase relationships between points. Attraction and pulses turn that ordered structure into an interactive field. The result is a designed motion toy, not a predictive n-body simulator or an accurate model of planetary gravity.

Each point has a sine-moving target. In normalized canvas coordinates, its target is x = 0.5 + r × sin(a + t v) and y = 0.5 + 0.86r × sin(2a + 0.73t v + 0.4), with per-point angle a, radius r and speed v. A spring-like return toward that target combines with attraction toward your chosen position.

Velocity decays by exp(-1.8 × dt), is capped in each direction, and rebounds at the field boundaries. The pulse adds an outward velocity impulse with sine-varied strength. These damping and boundary rules keep the composition bounded; they are deliberate toy behaviour, not a physical accuracy claim.

All points and connecting geometry are drawn in the browser. There are no particle sprites, baked motion clips or imported backgrounds. See technique for the zero-asset boundary and the distinction between generated geometry and interface text.

Reduced motion

The system’s reduced-motion preference stops autonomous visual animation. Moving the attractor, changing gravity or triggering a pulse still redraws a discrete state so the controls remain useful. This is intentionally different from waiting for the field to animate continuously.

Orbit Lattice is silent. For another direct-manipulation surface, try wave-garden. For an intentionally started audio sequence, see resonant-steps. Return to the playground guide.