Re:Random spherical troubles
- To: mathgroup at smc.vnet.net
- Subject: [mg25197] Re:[mg25170] Random spherical troubles
- From: Ranko Bojanic <rbojanic at columbus.rr.com>
- Date: Tue, 12 Sep 2000 21:24:41 -0400 (EDT)
- Organization: Ohio State University
- Sender: owner-wri-mathgroup at wolfram.com
On September 12,2000 Barbara DaVinci<barbara_79_f at yahoo.it> wrote:
> ........
> my problem is to generate a set of directions randomly distributed
> over the whole solid angle
> ......
Ciao Barbara:
In Donald E. Knuth's The Art of Computer Programming (Third Edition),
I found on p. 135 a section on Random points on an n-dimensional
sphere with radius one. If I have understood correctly that section,
uniformly distributed points on the surface of the unit sphere in the
first octant can be obtained as follows: Take 3 uniformly distributed
variables x, y and z in [0,1] and form the point
{x,y,z,}/Sqrt[x^2+y^2+z^2]. In Mathematica this can be implemented by
rPt3D := Module[{x = Random[], y = Random[], z = Random[]},
Return[{x,y,z}/Sqrt[x^2+y^2+z^2]]]
pts[n_]:= Table[Point[rPt3D],{n}];
To see thousand random points on the surface of the unit sphere, in the
first octant, use
Show[Graphics3D[pts[1000],ViewPoint -> { 4,4,6}]];
A similar method would be this one: select at random x and y in [0,1]
until you get x, y such that x^2+y^2 <= 1.The point
{x,y,Sqrt[1-x^2-y^2]}
will be then on the surface of the unit sphere. This can be implemented
by
newPt3D := Module[{ x = Random[ ], y = Random[ ]},
While[x^2 + y^2 > 1, x = Random[ ]; y = Random[ ]];
Return[{x,y, Sqrt[1 - x^2 - y^2]}]];
pts[n_]:= Table[Point[newPt3D],{n}];
Show[Graphics3D[pts[1000],ViewPoint ->{ 4,4,6}]];
The points obtained by either one of these two methods appear to be
uniformly distributed on the surface of the unit sphere in the first
octant.
Regards,
Ranko