Boost logo

Boost :

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:
> -Lewis
> _______________________________________________
Also see here for a discussion for 4 different techniques (and a proof
for the trig version!):

Jeff Faust

Boost list run by bdawes at, gregod at, cpdaniel at, john at