render: transform inaccurate float-based indexing into integer indexing

This commit is contained in:
2022-07-29 21:53:49 -07:00
parent 349e01ba16
commit 7f3c2a9395

View File

@@ -1,4 +1,4 @@
use crate::geom::Meters; use crate::geom::Index;
use crate::real::ToFloat as _; use crate::real::ToFloat as _;
use crate::cross::vec::{Vec2, Vec3}; use crate::cross::vec::{Vec2, Vec3};
use crate::sim::{AbstractSim, GenericSim, Sample}; use crate::sim::{AbstractSim, GenericSim, Sample};
@@ -198,12 +198,9 @@ impl<'a, S: AbstractSim> RenderSteps<'a, S> {
} }
fn get_at_px<'b>(&'b self, x_px: u32, y_px: u32) -> Sample<'b, S::Real, S::Material> { fn get_at_px<'b>(&'b self, x_px: u32, y_px: u32) -> Sample<'b, S::Real, S::Material> {
let x_prop = x_px as f32 / self.im.width() as f32; let x_idx = x_px * self.sim.width() / self.im.width();
let x_m = x_prop * (self.sim.width() as f32 * self.sim.feature_size() as f32); let y_idx = y_px * self.sim.height() / self.im.height();
let y_prop = y_px as f32 / self.im.height() as f32; self.sim.sample(Index::new(x_idx, y_idx, self.z))
let y_m = y_prop * (self.sim.height() as f32 * self.sim.feature_size() as f32);
let z_m = self.z as f32 * self.sim.feature_size() as f32;
self.sim.sample(Meters(Vec3::new(x_m, y_m, z_m)))
} }
////////////// Ex/Ey/Bz configuration //////////// ////////////// Ex/Ey/Bz configuration ////////////