$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Jeffrey Faust (jefffaust_at_[hidden])
Date: 2007-06-05 17:17:46
Lewis Hyatt wrote:
> Henrik Sundberg wrote:
>   
>> I doubt that the trig-version gives a good distribution:
>>
>> inlineVectortrig(uniform_01<generator_type>&random) {
>>    constfloatphi=2*M_PI*random();
>>    constfloatcos_theta=2*random()-1;
>>    constfloatsin_theta=sqrt(1-cos_theta*cos_theta);
>>    returnVector(cos_theta,sin_theta*cos(phi),sin_theta *sin(phi));
>> }
>>
>> The result ought to be more dense at the poles.
>>     
>
> The posted trig method is correct, it chooses a horizontal cutting plane 
> uniformly. You can show that the surface area of a sphere contained 
> between two z-coordinates only depends on the difference between the two 
> coordinates, not their location, so this generates the correct distribution.
>
> However, the "naive" method is incorrect, the resulting points are not 
> uniformly distributed over the sphere. The correct version of the 
> "naive" method is given here: 
> http://mathworld.wolfram.com/SpherePointPicking.html
>
> -Lewis
>
> _______________________________________________
>   
Also see here for a discussion for 4 different techniques (and a proof 
for the trig version!):
http://www.math.niu.edu/~rusin/known-math/96/sph.rand
Jeff Faust