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:
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);