From 19e73b070a3eee963136c332357a6cc727931bb9 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Mon, 14 Feb 2022 09:38:38 -0500 Subject: [PATCH] cleanup rectangle creation code --- src/func_plot.rs | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/src/func_plot.rs b/src/func_plot.rs index 474ab1d..eecbe38 100644 --- a/src/func_plot.rs +++ b/src/func_plot.rs @@ -57,35 +57,29 @@ pub fn draw( fn integral_rectangles( min_x: f32, step: f32, num_interval: usize, func: &dyn Fn(f64) -> f64, ) -> (Vec<(f32, f32, f32)>, f32) { - let mut area: f32 = 0.0; // sum of all rectangles' areas - let mut tmp1: f32; // Top left Y value that's tested - let mut tmp2: f32; // Top right Y value that's tested - let mut x2: f32; // X value of the right side of the rectangle - let mut y: f32; // Y value of the top of the rectangle - let mut x: f32; // X value of the left side of the rectangle - let mut data2: Vec<(f32, f32, f32)> = Vec::new(); - for e in 0..num_interval { - x = ((e as f32) * step) + min_x; + let data2: Vec<(f32, f32, f32)> = (0..num_interval).map(|e| { + let x: f32 = ((e as f32) * step) + min_x; - if x > 0.0 { - x2 = x + step; - } else { - x2 = x - step; - } - tmp1 = func(x as f64) as f32; - tmp2 = func(x2 as f64) as f32; + let x2: f32 = match x > 0.1 { + true => x+step, + false => x-step, + }; - if tmp2.abs() > tmp1.abs() { - y = tmp1; - } else { - y = tmp2; - } + let tmp1: f32 = func(x as f64) as f32; + let tmp2: f32 = func(x2 as f64) as f32; + + let y: f32 = match tmp2.abs() > tmp1.abs() { + true => tmp1, + false => tmp2 + }; // Add current rectangle's area to the total if !y.is_nan() { - area += y * step; - data2.push((x, x2, y)); + (x, x2, y) + } else { + (0.0, 0.0, 0.0) } - } + }).filter(|ele| ele != &(0.0, 0.0, 0.0)).collect(); + let area: f32 = data2.iter().map(|(_, _, y)| y*step).sum(); // sum of all rectangles' areas return (data2, area); }