# Random Coordinates: How to Randomize a Position on a Sphere

• Abzu
In summary, to randomize a position on a sphere, one can use a random number between 0 and 360 for longitude and a number between -90 to 90 for latitude. However, a better method would be to pick 3 random numbers between 0 and 1 for the x, y, and z coordinates. This would give a point inside the sphere of radius 1. Another option is to draw a random number from a uniform distribution and take the inverse sine to get the latitude, and then draw another random number for the longitude. This method ensures a more uniform spread of points on the sphere. One can also use the volume of a cube method, but it may result in bias in some areas.

#### Abzu

How do i randomize a position on a sphere? Using a random number between 0 and 360 for longitude and a number between -90 to 90 for latitude would make it more probable to get closer to the poles right?

picking 3 random numbers between 0 and 1 for the x,y and z coordinates sounds like a better bet...

mrbohn1 said:
picking 3 random numbers between 0 and 1 for the x,y and z coordinates sounds like a better bet...

Almost all of the time, this would give you a point inside a sphere of radius 1, which isn't what the OP asked for. For a point to be on the surface of the sphere, the squares of the coordinates would have to add to the square of the radius.

Apologies...didn't read the question properly. How about just picking the x and y coordinates as I suggested, and then randomly choosing whether the z-coordinate is positive or negative?

Drawing sine(latitude) from U[-1,1] and longitude from U[0,360º) does the trick.

A good random number package will provide separate interfaces for drawing from U[0,1), U[0,1], U(0,1), and U(0,1]. A not so good one might only provide just one of these four. There are some very small drawbacks to using not quite the right interface. For example, drawing longitude from U[0,360º] gives a small chance of doubling up on 0 versus 360º. Drawing sine(latitude) from U[-1,1) means you ruled out the North Pole.

D H said:
Drawing sine(latitude) from U[-1,1] and longitude from U[0,360º) does the trick.

A good random number package will provide separate interfaces for drawing from U[0,1), U[0,1], U(0,1), and U(0,1]. A not so good one might only provide just one of these four. There are some very small drawbacks to using not quite the right interface. For example, drawing longitude from U[0,360º] gives a small chance of doubling up on 0 versus 360º. Drawing sine(latitude) from U[-1,1) means you ruled out the North Pole.

Uhm, i have absolutely no idea what this means. I only know very basic math. And in case i was unclear in my first post, i want an even distribution, not centered to the poles.

Just thought of a blunt way of doing it. I peel the sphere into say 24 sections and lay them out flat, then draw a rectangle around all of it and randomizes a number inside the rectangle, a simpel X and Y value, and those points that miss the peels simply doesn't count. It's not pretty but i it'll work. Unless of course someone has a easier method.

What I gave will spread the points out uniformly over the globe.

I'll keep it simple -- after saying what U(a,b) and the related terms mean. Colloquially, U(a,b) means "a random number drawn from between a and b". The "U" means uniform; there are many other distributions besides uniform. The difference between square brackets and parentheses just means whether the endpoints are included or excluded from the set from which the numbers are drawn.

So, what does this mean? Draw a random number from between -1 and 1. Take the inverse sine of this number and express the result in degrees. This is your latitude. Draw a random number from between 0 and 360º. This is your longitude. If you draw a whole bunch of latitude,longitude pairs this way and plot their locations you will see that this gives a nice uniform spread over the globe. As you have already discovered, drawing latitude directly from between -90º and 90º does not give a nice uniform spread.

It works fine. Got some help from my sister though. Here's what i (her) came up with in Excel for the latitude.

=ASIN((RANDBETWEEN(-1000;1000)/1000))/PI()*180

Thanks D H!

You're welcome.

BTW, =DEGREES(ASIN(RAND()*2-1)) would work quite nicely as well.

My version of Excel doesn't even have a RANDBETWEEN function.

I know this is probably not much help to the OP, but it’s interesting to point out that DH’s method is mathematically equivalent to choosing latitude from a random distribution with a cosine probability density function,

$$f(\phi) = 1/2 \cos(\phi) \, : \, -\pi/2 \leq \phi \leq \pi/2$$

Since an element of surface on the sphere is (taking phi as latitude and theta as longitude) given by :

$$dS/r^2 = \cos(\phi) \, d\phi \, d\theta$$

and $\cos(\phi) d\phi$ is (for the given pdf) proportional to the probability that latitude is between $\phi$ and $\phi + d\phi$ then it follows that the probability of "hitting" a given element of surface on the sphere is proportional only to the SA of the element, no matter where that element of SA is located.

Last edited:
I'd probably ask for three random numbers in the range [-1, 1] and calculate the two angles of that vector, effectively projecting it onto a sphere. if you happen to get (0, 0, 0) then try again.

No polar bias doing it this way, though you need 3 random numbers per point rather than the minimum 2.

There's bias all over the place doing it this way!

In the vicinity of the projections onto the sphere of areas in the vicinity of
• The centers of the six faces of the cube: Too few points.
• The twelve edges of the cube: Too many points.
• The eight corners of the cube: Way too many points.

Ok I see, I had it very confused. Disregard my first post!

Think of it in terms of the volume of the cube that is inside a small cone with vertex at the center of the cube. The volume varies when the cone is aimed at a face versus a corner.

Your approach can be made to work. Reject x,y,z triples whose distance to the origin exceeds one. In other words, try again (and again and again if needed) until you get a triple that is inside the unit sphere. That way you are generating points inside the unit sphere rather than inside a cube.