star-sp

Random number generators and distributions
git clone git://git.meso-star.fr/star-sp.git
Log | Files | Refs | README | LICENSE

commit 1d574ef813d6c6d171aa08e882b65bba02cb7e82
parent 424ed34658422dc46808cbfdc8b36d4e309609ab
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Thu, 23 Jul 2015 16:00:06 +0200

Test the uniform random triangle sampling

Ensure the uniformity of the triangle sampling

Diffstat:
Msrc/test_ssp_ran_triangle.c | 20++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/test_ssp_ran_triangle.c b/src/test_ssp_ran_triangle.c @@ -42,7 +42,9 @@ main(int argc, char** argv) float A[3], B[3], C[3]; float v0[3], v1[3], v2[3], v3[3], v4[3], v5[3]; float plane[4]; - int i; + size_t counter[2]; + size_t nsteps; + size_t i; (void)argc, (void)argv; mem_init_proxy_allocator(&allocator, &mem_default_allocator); @@ -73,7 +75,7 @@ main(int argc, char** argv) CHECK(eq_epsf(f3_dot(plane, samps[i]), -plane[3], 1.e-6f), 1); f3_sub(tmp0, samps[i], A); - dot = f3_dot(f3_cross(tmp0, tmp0, v0), f3_cross(tmp1, v1, v0 )); + dot = f3_dot(f3_cross(tmp0, tmp0, v0), f3_cross(tmp1, v1, v0)); CHECK(signf(dot), 1.f ); f3_sub(tmp0, samps[i], B); dot = f3_dot(f3_cross(tmp0, tmp0, v2), f3_cross(tmp1, v3, v2)); @@ -86,6 +88,20 @@ main(int argc, char** argv) CHECK(eq_epsf(1.f / area, ssp_ran_triangle_uniform_pdf(A, B, C), 1.e-6f), 1); } + nsteps = 10000; + counter[0] = counter[1] = 0; + f3(A, -1.f, 0.f, 0.f); + f3(B, 1.f, 0.f, 0.f); + f3(C, 0.f, 1.f, 0.f); + FOR_EACH(i, 0, nsteps) { + ssp_ran_triangle_uniform(rng, A, B, C, samps[0]); + if(samps[0][0] < 0.f) + counter[0] += 1; + else + counter[1] += 1; + } + CHECK(labs((long)(counter[1] - counter[0])) < 100, 1); + ssp_rng_ref_put(rng); check_memory_allocator(&allocator); mem_shutdown_proxy_allocator(&allocator);