Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2022-03-17 14:48:41 +0300
committerJacques Lucke <jacques@blender.org>2022-03-17 14:48:41 +0300
commitd0968a9c52019b817c001562adbb875780d94786 (patch)
tree4f5548adcd757cb75443bde77b082487fbf81839 /source/blender/blenlib
parent8f68cff01b85bfde18c9442e6a638eda181ee159 (diff)
BLI: add probabilistic rounding utility
Diffstat (limited to 'source/blender/blenlib')
-rw-r--r--source/blender/blenlib/BLI_rand.hh6
-rw-r--r--source/blender/blenlib/intern/rand.cc9
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();