Which one is random?
Two fields of points. One was placed by pure chance — Math.random() for every coordinate. The other was spaced out deliberately. Most people pick the tidy one as "random," because real randomness looks suspiciously clumpy.
Trust your eye, then check. The clumps and voids give the true one away.
The grid is too even
The obvious fix for clumping is a grid — but perfect regularity brings its own curse: rigid rows, and moiré shimmer when it meets other patterns. Nothing in nature looks like graph paper.
The compromise is jitter: keep the grid's even coverage, but nudge each point randomly inside its cell. Slide from rigid to chaotic.
Blue noise
The gold standard: points placed at random, but with one rule — no two closer than a set distance. You get the organic irregularity of randomness and the even coverage of a grid, with no clumps and no rows. It's called blue noise.
Bridson's algorithm grows it outward from a seed, dart by dart. Set the spacing and watch the field fill.
Sampling with intent
Often you don't want points spread evenly — you want them where the action is. Rejection sampling is the workhorse: throw darts across the whole space, keep only those that land under a target curve, discard the rest.
Kept darts pile up thickest where the curve is tallest, so their density traces the shape exactly. Watch the histogram below grow into the curve.
The stippling studio
Put it all together and you get one of design's quiet workhorses: blue-noise stippling. Sample a field so that dots crowd where it's dark and thin out where it's light — but keep them evenly spaced everywhere, so the result reads as smooth tone rather than clumps. This is how renderers, plotters, and generative artists turn an image into dots. Pick a field, set the density, recolour.