Snapping in dense target areas causes oscillation
Aliases: snap oscillation · sticky target jitter · dense targets
What it is
In dense target areas, snap oscillation occurs when neighbouring candidates' snap ranges overlap or nearly meet: a pointer or object switches back and forth between targets after tiny input changes. Snapping meant to aid stopping instead obscures raw input and makes the intended location hard to reach.
Why it happens
Each candidate tries to rewrite input position within its own radius. When candidate separation is smaller than the sum of their action ranges, the current snap pushes output nearer another candidate, and the next input triggers a switch back. Without entry–exit hysteresis, precedence, or locking, noise, slow movement, and sensor jitter all amplify the oscillation.
Going one layer deeper, the geometric root of the oscillation is that the pointer's trajectory keeps crossing the equidistant boundary between two candidates' snap regions — approximately a Voronoi boundary centred on each candidate. As long as the decision rule is a single threshold ("whichever is closer wins"), output flips discontinuously across that boundary, and hand input naturally carries a few millimetres of high-frequency tremor. Once that tremor's amplitude exceeds the gap between the boundary and either candidate's centre, oscillation is mathematically guaranteed — this is not an implementation flaw but a property of the "nearest wins" rule itself near a boundary. Hysteretic locking works precisely because it splits one threshold into two: entering a candidate requires crossing a stricter threshold, leaving it requires crossing a looser one, and the gap between the two forms a dead zone that turns what was a continuously flippable boundary decision into a discrete event requiring a deliberate move.
Studying it
Vary candidate separation, radius, movement speed, lock threshold, and target count. Measure candidate switches, arrival time, reverse correction, failure rate, and perceived control. Include both deliberate travel across multiple targets and attempts to stop between them. To isolate the effect of hysteretic locking specifically, compare oscillation counts under "no hysteresis" against several buffer-band widths; too wide a band sacrifices responsiveness, too narrow fails to suppress oscillation, and this trade-off curve needs to be measured rather than assumed.
Where it stops holding
Sparse targets and clear grid intersections rarely oscillate, and a larger radius may genuinely help there. Dense text, node diagrams, and tables commonly have multiple equivalent candidates and cannot inherit sparse-canvas parameters. Highlighting only exposes the jitter — it cannot resolve the underlying geometric conflict, since a highlight merely lets people see the oscillation happening, without stopping the decision rule from flipping repeatedly at the boundary.
Applying it
- Shrink the radius, establish candidate precedence, or apply hysteretic locking after the first snap in dense areas, using different thresholds for entry and exit.
- Show the current candidate and make release easy, so position changes never feel unexplained.
- How to check: log the candidate-switch count per operation and plot it against candidate separation; frequently switching areas need layout, snap-rule, or buffer-band changes — not simply disabling snapping altogether.
Related
- Same group: C1.12.1 Snapping shortens effective distance and reduces pointing difficulty · C1.12.3 Snap strength needs adjustment or temporary suppression
- Nearby: C1.13 Area cursors and bubble cursors · C1.14 Side effects of pointing assistance
- Search terms:
snap oscillation·hysteresis·Voronoi boundary