Render current as a vector field

hmm...
This commit is contained in:
2020-09-07 21:34:33 -07:00
parent 0c6a01c671
commit 995b5b7c54
2 changed files with 13 additions and 5 deletions

View File

@@ -89,7 +89,7 @@ impl<'a> RenderSteps<'a> {
}
}
}
fn render_vector_field<F: Fn(&Cell<mat::Static>) -> Point>(&mut self, color: Rgb<u8>, measure: F) {
fn render_vector_field<F: Fn(&Cell<mat::Static>) -> Point>(&mut self, color: Rgb<u8>, 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() {