Add dielectric material

This commit is contained in:
Camden Dixie O'Brien
2025-09-23 15:35:26 +01:00
parent 313619d8d5
commit 73028df5b3
7 changed files with 73 additions and 12 deletions

View File

@@ -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;