Add dielectric material
This commit is contained in:
16
src/rng.c
16
src/rng.c
@@ -18,14 +18,9 @@ static uint32_t next(rng_t *rng)
|
||||
return rng->state = x;
|
||||
}
|
||||
|
||||
static double canonical(rng_t *rng)
|
||||
{
|
||||
return (double)next(rng) / (double)UINT32_MAX;
|
||||
}
|
||||
|
||||
static double disc(rng_t *rng)
|
||||
{
|
||||
return 2.0 * canonical(rng) - 1.0;
|
||||
return 2.0 * rng_canon(rng) - 1.0;
|
||||
}
|
||||
|
||||
rng_t rng_init(unsigned seed)
|
||||
@@ -35,6 +30,11 @@ rng_t rng_init(unsigned seed)
|
||||
return (rng_t) { .state = tv.tv_usec + seed };
|
||||
}
|
||||
|
||||
double rng_canon(rng_t *rng)
|
||||
{
|
||||
return (double)next(rng) / (double)UINT32_MAX;
|
||||
}
|
||||
|
||||
vec3_t rng_vec3(rng_t *rng)
|
||||
{
|
||||
const vec3_t v = { disc(rng), disc(rng), disc(rng) };
|
||||
@@ -43,10 +43,10 @@ vec3_t rng_vec3(rng_t *rng)
|
||||
|
||||
vec3_t rng_gaussian_xy(rng_t *rng, double stddev)
|
||||
{
|
||||
const double r1 = canonical(rng);
|
||||
const double r1 = rng_canon(rng);
|
||||
double r2;
|
||||
do
|
||||
r2 = canonical(rng);
|
||||
r2 = rng_canon(rng);
|
||||
while (r2 == 0);
|
||||
|
||||
const double theta = 2.0 * M_PI * r1;
|
||||
|
||||
Reference in New Issue
Block a user