diff options
author | Julian T <julian@jtle.dk> | 2021-02-07 00:37:58 +0100 |
---|---|---|
committer | Julian T <julian@jtle.dk> | 2021-02-07 00:37:58 +0100 |
commit | f3f56ed5f183f8461cc91cb6430d97c725ba159c (patch) | |
tree | 32d07fc105185849b8bf6bfe1fd63bf85f976410 /src/sample | |
parent | b64c7e972c52b7d015d661866f0cf902370343e5 (diff) |
Move to double to avoid rounding error
This rounding errors seems to happen when adding floats very close to 1
to a relatively large number.
325.0 + 0.99999034 = 326.0
This is a problem as this sample should be counted at the 325 pixel.
However this will be a lesser problem when filtering is implemented.
Diffstat (limited to 'src/sample')
-rw-r--r-- | src/sample/mod.rs | 5 | ||||
-rw-r--r-- | src/sample/uniform.rs | 5 |
2 files changed, 5 insertions, 5 deletions
diff --git a/src/sample/mod.rs b/src/sample/mod.rs index 84ac755..5095501 100644 --- a/src/sample/mod.rs +++ b/src/sample/mod.rs @@ -1,6 +1,5 @@ -use crate::Float; +use crate::{M_PI, Float}; use crate::core::{Vector3f, Vector2f}; -use std::f32::consts::PI; mod uniform; @@ -20,7 +19,7 @@ pub trait Sampler { fn get_unit_vector(&mut self) -> Vector3f { let s2d = self.get_sample_2d(); - let lambda = distribute_between(s2d.x, -PI, PI); + let lambda = distribute_between(s2d.x, -M_PI, M_PI); let costheta = 2.0 * s2d.y - 1.0; let sintheta = costheta.acos().sin(); diff --git a/src/sample/uniform.rs b/src/sample/uniform.rs index cc6825a..e2f0b7c 100644 --- a/src/sample/uniform.rs +++ b/src/sample/uniform.rs @@ -15,13 +15,14 @@ impl UniformSampler { pub fn new() -> Self { Self { r: Pcg32::seed_from_u64(1), - d: Uniform::from(0.0..1.0), + d: Uniform::new(0.0, 1.0), } } } impl Sampler for UniformSampler { fn get_sample(&mut self) -> Float { - self.d.sample(&mut self.r) + let sample = self.d.sample(&mut self.r); + sample } } |