fix BarChart
This commit is contained in:
parent
28ddc4e900
commit
1d1574a1ed
1
TODO.md
1
TODO.md
@ -2,7 +2,6 @@
|
||||
1. Port to [egui](https://github.com/emilk/egui)
|
||||
- Proper support for dynamic chart display size.
|
||||
- Don't re-render plot on mouse movement
|
||||
- Fix interval display
|
||||
- Fix crashes in parsing strings (`TextDecoder.decode: Decoding failed.`)
|
||||
2. Multiple functions in one graph.
|
||||
3. Non `y=` functions.
|
||||
@ -56,6 +56,10 @@ impl ChartManager {
|
||||
(filtered_data, rect_data, area)
|
||||
}
|
||||
|
||||
pub fn get_step(&self) -> f64 {
|
||||
(self.max_x - self.min_x).abs() / (self.num_interval as f64)
|
||||
}
|
||||
|
||||
pub fn do_update_front(&self, resolution: usize, num_interval: usize) -> bool {
|
||||
(self.resolution != resolution) | (num_interval != self.num_interval)
|
||||
}
|
||||
@ -100,6 +104,7 @@ impl ChartManager {
|
||||
// Creates and does the math for creating all the rectangles under the graph
|
||||
#[inline]
|
||||
fn integral_rectangles(&self, step: f64) -> (Vec<(f64, f64)>, f64) {
|
||||
let half_step = step/2.0;
|
||||
let data2: Vec<(f64, f64)> = (0..self.num_interval)
|
||||
.map(|e| {
|
||||
let x: f64 = ((e as f64) * step) + self.min_x;
|
||||
@ -114,12 +119,19 @@ impl ChartManager {
|
||||
let tmp2: f64 = self.function.run(x2);
|
||||
|
||||
// Chooses the y value who's absolute value is the smallest
|
||||
let mut output = match tmp2.abs() > tmp1.abs() {
|
||||
true => (x, tmp1),
|
||||
false => (x2, tmp2),
|
||||
};
|
||||
|
||||
|
||||
match tmp2.abs() > tmp1.abs() {
|
||||
true => (x2, tmp1),
|
||||
false => (x, tmp2),
|
||||
// Applies `half_step` in order to make the bar graph display properly
|
||||
if output.0 > 0.0 {
|
||||
output.0 = output.0+half_step;
|
||||
} else {
|
||||
output.0 = output.0-half_step;
|
||||
}
|
||||
|
||||
output
|
||||
})
|
||||
.filter(|(_, y)| !y.is_nan())
|
||||
.collect();
|
||||
|
||||
@ -88,7 +88,7 @@ impl epi::App for MathApp {
|
||||
}
|
||||
}
|
||||
|
||||
ui.add(egui::Slider::new(num_interval, 1..=usize::MAX).text("Interval"));
|
||||
ui.add(egui::Slider::new(num_interval, 10..=usize::MAX).text("Interval"));
|
||||
});
|
||||
|
||||
let _update_back = chart_manager.do_update_back(func_str.clone(), *min_x, *max_x);
|
||||
@ -134,7 +134,7 @@ impl epi::App for MathApp {
|
||||
}
|
||||
}
|
||||
};
|
||||
let bar_chart = BarChart::new(bars).color(Color32::BLUE);
|
||||
let bar_chart = BarChart::new(bars).color(Color32::BLUE).width(chart_manager.get_step());
|
||||
|
||||
Plot::new("plot")
|
||||
.view_aspect(1.0)
|
||||
|
||||
@ -133,6 +133,7 @@ impl Function {
|
||||
|
||||
pub fn str_compare(&self, other_string: String) -> bool { self.func_str == other_string }
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn get_string(&self) -> String { self.func_str.clone() }
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user