star-sp

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

commit 424ed34658422dc46808cbfdc8b36d4e309609ab
parent 96738f21aef83519e46dab47a5166c039b8b54d8
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Thu, 23 Jul 2015 14:40:14 +0200

Fix a strong issue in the uniform sampling of a triangle

Diffstat:
Mcmake/CMakeLists.txt | 2+-
Msrc/ssp.h | 8++++----
2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt @@ -67,7 +67,7 @@ rcmake_append_runtime_dirs(_runtime_dirs RSys ${Boost_LIBRARY_DIRS}) ################################################################################ set(VERSION_MAJOR 0) set(VERSION_MINOR 2) -set(VERSION_PATCH 0) +set(VERSION_PATCH 1) set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) set(SSP_FILES_SRC ssp_rng.c ssp_rng_proxy.c) diff --git a/src/ssp.h b/src/ssp.h @@ -251,17 +251,17 @@ ssp_ran_triangle_uniform const float v0[3], const float v1[3], const float v2[3],/*triangle vertices*/ float sample[3]) /* Sampled position */ { - double u, v, one_minus_u; + double sqrt_u, v, one_minus_u; int i; ASSERT(rng && v0 && v1 && v2 && sample); - u = ssp_rng_canonical(rng); + sqrt_u = sqrt(ssp_rng_canonical(rng)); v = ssp_rng_canonical(rng); - one_minus_u = 1.0 - u; + one_minus_u = 1.0 - sqrt_u; FOR_EACH(i, 0, 3) { sample[i] = (float) - (v2[i] + one_minus_u * (v0[i] - v2[i]) + (v*u) * (v1[i] - v2[i])); + (v2[i] + one_minus_u * (v0[i] - v2[i]) + (v*sqrt_u) * (v1[i] - v2[i])); } return sample; }