Drawing a field nobody can see.
Gauss is an electrostatics sandbox for the curious: place positive and negative charges and the electric field draws itself — lines of force from plus to minus, equipotential contours nesting around each pole, and a test charge that falls along the field it can never touch. Its one job is to make an invisible field feel like something you can grab and reshape with your hands.
01 Palette
A laboratory ground so the field can glow against it. The two accents are the only saturated colours on the page, and they carry a physical meaning: warm for positive, cool for negative — the convention every physics textbook already trained your eye on.
02 Type
A grotesque with a slightly technical, drawn-with-a-compass feel — engineered but not cold. It carries the wordmark and the headline without any decorative fuss the field would have to compete with.
Every number — charge count, net charge, field strength at the cursor — is monospaced with tabular figures, so values change without the layout twitching. It reads like instrument output, because that is what it is.
03 Technique
Field lines by Runge–Kutta integration
The field
E(r) = Σ k qᵢ r̂ᵢ / rᵢ²is summed over every charge. From seed points ringing each pole — as many as the charge is strong — a fourth-order Runge–Kutta integrator steps along the normalised field in fixed arc-lengths, tracing each line until it lands on an opposite charge or leaves the frame. Every line is an SVG<path>.The plus-to-minus colour split
A line that connects a positive to a negative charge is cut at its midpoint and drawn as two paths: red for the outbound half, blue for the inbound. So the signature literally shows the field springing from one pole and landing on the other — the physics made visible in the colour itself.
Equipotentials by marching squares
The scalar potential
V(r) = Σ k qᵢ / rᵢis sampled on a grid, and a marching-squares pass extracts iso-value contours at a geometric set of levels — tight rings where the field is strong, wide where it is weak. The zero-potential contour, the balance line between opposite charges, is drawn dashed.A test charge under Newton's law
Release a probe and it obeys
F = qE: it reads the local field, accelerates, and is integrated frame by frame with a clamped time-step and a fading trail, tracing a real line of force. Underprefers-reduced-motionthe same integration runs once and the trajectory is drawn as a still path instead of animating.Live re-knitting
Dragging a pole marks the field dirty and recomputes lines and contours inside a single
requestAnimationFrameper frame, so a few thousand field evaluations per second keep the whole picture re-knitting under your finger. A cursor probe arrow reads the field vector wherever you hover.
04 Iteration log
Re-read the render at the resting dipole. The first cut seeded field lines from both charge signs and kept the negative-seeded ones if they escaped the frame — which sprayed a handful of stray blue lines outward from the negative pole, reading as if the sink were a source. Rewrote the seeding: lines originate from positive charges (or from negatives only when no positive exists), so a plain dipole draws cleanly. Bumped equipotential opacity so the nesting rings — the "density reads strength" story — actually register against the ground.
Enriched the signature: connecting lines now split red-to-blue at their midpoint, so the field visibly leaves plus and arrives at minus. Added the second-read detail — a live field-probe vector that follows the cursor, pointing along the local field with a length that reads its magnitude, so you can feel the invisible force by moving the mouse. Tuned the test-charge physics (clamped acceleration near the poles, capped speed) so a released probe curves convincingly instead of slingshotting.
Drove every interaction under headless Chrome: dragging a pole changes the field (path-hash + screenshot diff), a released probe measurably accelerates along a line, adding a charge re-solves the field — all with zero console errors. Fixed the 375px layout, where the readout had been floating over the top of the field; it is now a single bottom scrim bar (that redundant panel border was the ornament cut by the Chanel rule). Confirmed the reduced-motion path renders the full static field plus a still trajectory, never a blank frame. The field is SVG, so it stays crisp at any pixel ratio with no device-pixel-ratio scaling to manage.