#include "random.h" #include double randn(void) { /* Generates a random number from a normal distribution using the * Box-Muller transform. */ double u1, u2; u1 = genrand_real1(); u2 = genrand_real1(); return sqrt(-2*log(u1))*cos(2*M_PI*u2); } void rand_sphere(double *dir) { /* Generates a random point on the unit sphere. */ double u, v, theta, phi; u = genrand_real1(); v = genrand_real1(); phi = 2*M_PI*u; theta = acos(2*v-1); dir[0] = sin(theta)*cos(phi); dir[1] = sin(theta)*sin(phi); dir[2] = cos(theta); }