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
- Put the attractor near the centre and reduce gravity. Look for the field’s underlying order.
- Move toward an edge and raise gravity. Compare the nearby points with those farther away.
- Trigger Send pulse and observe how the disturbance changes the arrangement.
- 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.