Render current as a vector field
hmm...
This commit is contained in:
@@ -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() {
|
||||
|
Reference in New Issue
Block a user