I saw the following statement posted by Fermat's Library on Twitter:

The way to correctly generate a random point on the surface of a unit sphere is not to pick uniform distributions $\theta$ in $[0,2\pi)$ and $\phi$ in $[0,\pi)$.

Instead, choose $u$ and $v$ from uniform distributions on $[0,1)$. Then,

  • $\phi = \cos^{-1}(2v-1)$
  • $\theta = 2\pi u$

I can see why uniformly choosing $\theta$ in $[0,2\pi)$ and $\phi$ in $[0,\pi)$ would lead to points near the poles being more likely to be chosen than points near the equator.

But I can't think of an intuitive explanation for why the given solution correctly gives a uniform distribution. Is there a good intuitive explanation for this?

  • $\begingroup$ it's the famous theorem of Archimedes saying that the projection of a sphere to a tangent cylinder preserves the area (a small piece of the sphere gets stretched in one direction and squeezed in the orthogonal direction, by the same amount). $\endgroup$
    – user8268
    Dec 19, 2020 at 7:26

1 Answer 1


The length of the ring at latitude $\phi$ is proportional to $\cos\phi$; this is also proportional to the pdf of the random variable that is the latitude of a point uniformly distributed on a sphere.

The integral of the pdf is the cdf; since the pdf expression contains $\cos\phi$ its integral should also be a sine wave. If we use the angular difference from a pole as variable, this wave should go from $0$ at $0$ to $1$ at $\pi$.

The inverse of the cdf is the quantile function, which is what we really want. Since the cdf was a sine wave, the quantile function should be the $\cos^{-1}$ or $\sin^{-1}$ of something; looking at the required values ($0$ at $0$, $\pi$ at $1$) we infer that the quantile function is $\cos^{-1}(1-2x)$. To generate the latitude for a uniform random point on the sphere, $x$ should be a uniform $U(0,1)$ variate; it is easy to see that both $1-2x$ and $2x-1$ are uniformly distributed over $[-1,1]$, so we have $\phi=\cos^{-1}(2x-1)$.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .