diff options
author | Jacques Lucke <jacques@blender.org> | 2022-03-17 14:48:41 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2022-03-17 14:48:41 +0300 |
commit | d0968a9c52019b817c001562adbb875780d94786 (patch) | |
tree | 4f5548adcd757cb75443bde77b082487fbf81839 /source/blender/blenlib | |
parent | 8f68cff01b85bfde18c9442e6a638eda181ee159 (diff) |
BLI: add probabilistic rounding utility
Diffstat (limited to 'source/blender/blenlib')
-rw-r--r-- | source/blender/blenlib/BLI_rand.hh | 6 | ||||
-rw-r--r-- | source/blender/blenlib/intern/rand.cc | 9 |
2 files changed, 15 insertions, 0 deletions
diff --git a/source/blender/blenlib/BLI_rand.hh b/source/blender/blenlib/BLI_rand.hh index 069a81bb84b..2c4484bd63f 100644 --- a/source/blender/blenlib/BLI_rand.hh +++ b/source/blender/blenlib/BLI_rand.hh @@ -103,6 +103,12 @@ class RandomNumberGenerator { return float3(rand1, rand2, 1.0f - rand1 - rand2); } + /** + * Round value to the next integer randomly. + * 4.9f is more likely to round to 5 than 4.6f. + */ + int round_probabilistic(float x); + float2 get_unit_float2(); float3 get_unit_float3(); /** diff --git a/source/blender/blenlib/intern/rand.cc b/source/blender/blenlib/intern/rand.cc index 27774cad31b..17bf5585f3f 100644 --- a/source/blender/blenlib/intern/rand.cc +++ b/source/blender/blenlib/intern/rand.cc @@ -374,6 +374,15 @@ void RandomNumberGenerator::seed_random(uint32_t seed) this->seed(seed + hash[seed & 255]); } +int RandomNumberGenerator::round_probabilistic(float x) +{ + /* Support for negative values can be added when necessary. */ + BLI_assert(x >= 0.0f); + const float round_up_probability = fractf(x); + const bool round_up = round_up_probability > this->get_float(); + return (int)x + (int)round_up; +} + float2 RandomNumberGenerator::get_unit_float2() { float a = (float)(M_PI * 2.0) * this->get_float(); |