Gaussian pseudo-random
The polar form of the Box-Muller transformation for calculating random variables with a Gaussian (or Normal) distribution.
on GetGausseRandom (mean, standardDeviation)
-- returns a standard Gaussian random number
-- based upon the polar form of the Box-Muller transform
w = 2.0
repeat while ( w >= 1.0 )
x1 = 2.0 * (random(0,1000000)/1000000.0) - 1.0
x2 = 2.0 * (random(0,1000000)/1000000.0) - 1.0
w = x1 * x1 + x2 * x2
end repeat
w = sqrt( (-2.0 * log( w ) ) / w )
r = (x1 * w)
if voidP(mean) then return r
return (mean + r * standardDeviation)
end
This function can be useful for creating 'weighted' randomness - ie random values that tend to congregate around an 'average' rather than being evenly spread across the range of possibilities. Here's an example of using Gaussian pseudo-random numbers to make piles of snow. Source Movie
First published 26/04/2005