SimHash draws m random Gaussian vectors s1, …, sm and stores one bit per vector, sign(si·x): which side of the hyperplane perpendicular to si the vector x is on. Two vectors x and y get different bits exactly when the hyperplane passes between them, that is, when sign(si·x · si·y) = −1.
The direction of a random hyperplane is uniform, and it separates x from y when it falls in the angle θ between them (or the opposite angle), so Pr[bits differ] = θ/π. If H of the m bits differ, then θ̂ = π·H/m is an unbiased estimate of θ, with standard deviation π√(p(1−p)/m) where p = θ/π. Only the angle survives: the lengths of x and y are lost.
Drag the tips of x and y. The orange wedges are the directions a hyperplane can take and still separate them: θ/π of all directions. Things to try: put y on top of x (no bits ever differ), opposite x (all differ), or perpendicular (about half differ); then change the lengths and see that nothing else changes.
Highlighted rows are hyperplanes that separate x and y: their bits differ.