From 995b5b7c548592893457f1acdcac3538f4aafced Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 7 Sep 2020 21:34:33 -0700 Subject: [PATCH] Render current as a vector field hmm... --- src/driver.rs | 2 +- src/render.rs | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/driver.rs b/src/driver.rs index 7c3b223..a195eef 100644 --- a/src/driver.rs +++ b/src/driver.rs @@ -49,7 +49,7 @@ impl Driver { for inset in 0..thickness { let depth = thickness - inset; // TODO: tune a scalar multiplier on this value - let conductivity = 0.1 * (depth*depth) as f64; + let conductivity = 0.02 * (depth*depth) as f64; for x in inset..self.state.width() - inset { // left *self.state.get_mut(x, inset).mat_mut() = mat::Static::conductor(conductivity).into(); diff --git a/src/render.rs b/src/render.rs index 9fa34f4..37e4b8d 100644 --- a/src/render.rs +++ b/src/render.rs @@ -89,7 +89,7 @@ impl<'a> RenderSteps<'a> { } } } - fn render_vector_field) -> Point>(&mut self, color: Rgb, measure: F) { + fn render_vector_field) -> Point>(&mut self, color: Rgb, typical: f64, measure: F) { let w = self.sim.width(); let h = self.sim.height(); let vec_spacing = 10; @@ -97,8 +97,8 @@ impl<'a> RenderSteps<'a> { for x in 0..w { if x % vec_spacing == 0 && y % vec_spacing == 0 { let vec = self.field_vector(x, y, vec_spacing, &measure); - let norm_vec = scale_vector(vec, 100.0); - let alpha = scale_unsigned(vec.mag_sq(), 500.0); + let norm_vec = scale_vector(vec, typical); + let alpha = 0.7*scale_unsigned(vec.mag_sq(), typical * 5.0); let vec = norm_vec * (vec_spacing as f64); let center = Point::new(x as _, y as _) + Point::new(vec_spacing as _, vec_spacing as _)*0.5; self.im.draw_field_arrow(center, vec, color, alpha as f32); @@ -107,7 +107,15 @@ impl<'a> RenderSteps<'a> { } } fn render_e_field(&mut self) { - self.render_vector_field(Rgb([0xff, 0xff, 0xff]), |cell| cell.e()); + self.render_vector_field(Rgb([0xff, 0xff, 0xff]), 100.0, |cell| cell.e()); + // current + self.render_vector_field(Rgb([0x00, 0xa0, 0x30]), 0.001, |cell| { + if cell.mat().conductivity() >= 1.0e3 { + cell.e()*cell.mat().conductivity() + } else { + Default::default() + } + }); } fn render_measurements(&mut self) { for (meas_no, m) in self.meas.iter().enumerate() {