Picking random points in the volume of sphere with uniform probability

I have a sphere of radius R_{s}, and I would like to pick random points in its volume with uniform probability. How can I do so while preventing any sort of clustering around poles or the center of the sphere?


Since I’m unable to answer my own question, here’s another solution:

Using the strategy suggested by Wolfram MathWorld for picking points on the surface of a sphere: Let \theta be randomly distributed real numbers over the interval [0,2\pi], let \phi=\arccos(2v−1) where v is a random real number over the interval [0,1], and let r=R_s (\mathrm{rand}(0,1))^\frac13. Converting from spherical coordinates, a random point in (x,y,z) inside the sphere would therefore be: ((r\cos(\theta)\sin(\phi)),(r\sin(\theta)\sin(\phi)),(r\cos(\phi))).

A quick test with a few thousand points in the unit sphere appears to show no clustering. However, I’d appreciate any feedback if someone sees a problem with this approach.

Answer

Let’s say your sphere is centered at the origin (0,0,0).

For the distance D from the origin of your random pointpoint, note that you want P(D \le r) = \left(\frac{r}{R_s}\right)^3. Thus if U is uniformly distributed between 0 and 1, taking D = R_s U^{1/3} will do the trick.

For the direction, a useful fact is that if X_1, X_2, X_3 are independent normal random variables with mean 0 and variance 1, then
\frac{1}{\sqrt{X_1^2 + X_2^2 + X_3^2}} (X_1, X_2, X_3)
is uniformly distributed on (the surface of) the unit sphere. You can generate normal random variables from uniform ones in various ways; the Box-Muller algorithm is a nice simple approach.

So if you choose U uniformly distributed between 0 and 1, and X_1, X_2, X_3 iid standard normal and independent of U, then
\frac{R_s U^{1/3}}{\sqrt{X_1^2 + X_2^2 + X_3^2}} (X_1, X_2, X_3)
would produce a uniformly distributed point inside the ball of radius R_s.

Attribution
Source : Link , Question Author : MHK , Answer Author : Nate Eldredge

Leave a Comment