MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Random spherical troubles

  • To: mathgroup at
  • Subject: [mg25218] Re: [mg25170] Random spherical troubles
  • From: Tomas Garza <tgarza01 at>
  • Date: Fri, 15 Sep 2000 02:21:51 -0400 (EDT)
  • Sender: owner-wri-mathgroup at

Your question has certainly attracted quite a number of solutions. IMHO, 
I think Daniel Lichtblau (in his (i)) and Ranko Bojanic offer the more 
straightforward. I assume that "randomly distributed over the whole 
solid angle" means that they obey a uniform distribution in three 
dimensions. It is clear that the line going from the origin to the point 
in three dimensions generated by {Random[], Random[], Random[]} is then 
(pseudo) randomly distributed inside the first octant. The following 
code will generate 100 (pseudo) randomly directed lines from the origin. 
It will show a scatter plot of such lines in 3D, where the points in red 
lie on the unit sphere and have the same direction as the corresponding 
points in blue directly generated by three randomly chosen coordinates 
(you needn't discard those points originally lying outside the unit 
sphere, as Daniel suggests).

<< Graphics`Graphics3D`;
long[x_] := Sqrt[x.x];
n = 100;
points3D = Table[{Random[], Random[], Random[]}, {n}];
a13D = ScatterPlot3D[points3D, PlotStyle -> {Hue[0.75], 
      DisplayFunction -> Identity];
points3D2 =
    Table[points3D[[j]]/Sqrt[points3D[[j]].points3D[[j]]], {j, 1,
a23D = ScatterPlot3D[points3D2, PlotStyle -> {Hue[1], 
      DisplayFunction -> Identity];
comp = Table[
      Max[long[points3D[[j]]], long[points3D2[[j]]]], {j, 1,
linas3D =
          Line[{{0, 0, 0},
              If[comp[[j]] <= 1, {points3D2[[j, 1]], points3D2[[j, 
                  points3D2[[j, 3]]}, {points3D[[j, 1]], points3D[[j, 
                  points3D[[j, 3]]}]}]], {j, 1, Length[points3D]}],
      DisplayFunction -> Identity];
Show[a13D, a23D, linas3D, Axes -> True, PlotRange -> {{0, 1}, {0, 1}, 
{0, 1}},
     DisplayFunction -> $DisplayFunction];

The plot is somewhat deceiving in that the resulting lines look not 
quite so random. However, if you try different 3D ViewPoints you'll be 
satisfied that they are all right. And if you look at the 2D projections 
of the red points (i.e., those lying on the unit sphere) on each of the 
orthogonal planes, you'll see that they are indeed behaving reasonably 
well, as far as one can judge simply by looking at them. For example:

proy = points3D2 /. {x_, y_, z_} -> {x, z};
b = ListPlot[proy, PlotStyle -> {Hue[1], PointSize[0.015]},
      PlotRange -> {{0, 1}, {0, 1}}, DisplayFunction -> Identity];
Show[Graphics[Circle[{0, 0}, 1, {0, Pi/2}]], b, Axes -> True,
  AspectRatio -> 1]

Tomas Garza
Mexico City

Barbara DaVinci wrote:
>  This time, my problem is to generate a set of
> directions randomly
>  distributed over the whole solid angle.

  • Prev by Date: Re: Re: Mathematica Publication Question
  • Next by Date: Re: Service multiple mathlinks
  • Previous by thread: RE: Random spherical troubles
  • Next by thread: Re: Random spherical troubles