How can I generate points randomly distributed on a sphere?
-
That is, how can I generate points that are equally distributed over the
area of the sphere? It won't work, for example, to generate (uniformly
distributed) random latitudes and (uniformly distributed) random longitudes,
because any specified interval of latitude includes a much larger area
when it is near the equator than when it is near a pole, so this "method"
will generate a much larger area-density of points near the poles than
near the equator.
-
The trick is to know that the area of a sphere's surface contained between
two parallel planes that both cut the sphere depends only on the distance
between the planes, not on where they cut it.
-
Set up a coordinate system (z,phi) where z is an axis that runs from south
pole to north pole (z = -R to +R, where R is the sphere's radius), and
where phi is the longitude, which runs (say) between 0 and 2 pi (radians).
The area of a surface patch between z and z+dz, phi and phi+dphi then depends
only on dz and dphi, not at all on z or phi.
-
To generate a random point on the sphere, it is necessary
only to generate two random numbers, z between -R and R, phi between 0
and 2 pi, each with a uniform distribution
-
To find the latitude (theta) of this point, note that z=Rsin(theta), so
theta=sin-1(z/R); its longitude is (surprise!) phi.
-
In rectilinear coordinates, x=Rcos(theta)cos(phi), y=Rcos(theta)sin(phi),
z=Rsin(theta)= (surprise!) z.
-
Needless to say, (x,y,z) are not independent, but are rather constrained
by x2+y2+z2=R2.