plot(scale): Correct the least index (#1186)

This commit is contained in:
Floyd Wang 2025-08-29 16:42:59 +08:00 committed by GitHub
parent 1267857a8c
commit 7fb6000189
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -9,7 +9,6 @@ use super::Scale;
pub struct ScalePoint<T> { pub struct ScalePoint<T> {
domain: Vec<T>, domain: Vec<T>,
range_tick: f32, range_tick: f32,
least_index_range_tick: f32,
} }
impl<T> ScalePoint<T> impl<T> ScalePoint<T>
@ -18,8 +17,8 @@ where
{ {
pub fn new(domain: Vec<T>, range: Vec<f32>) -> Self { pub fn new(domain: Vec<T>, range: Vec<f32>) -> Self {
let len = domain.len(); let len = domain.len();
let (range_tick, least_index_range_tick) = if len.is_zero() { let range_tick = if len.is_zero() {
(0., 0.) 0.
} else { } else {
let range_diff = range let range_diff = range
.iter() .iter()
@ -28,20 +27,13 @@ where
.map_or(0., |(min, max)| max - min); .map_or(0., |(min, max)| max - min);
if len == 1 { if len == 1 {
(range_diff, range_diff) range_diff
} else { } else {
( range_diff / len.saturating_sub(1) as f32
range_diff / len.saturating_sub(1) as f32,
range_diff / len as f32,
)
} }
}; };
Self { Self { domain, range_tick }
domain,
range_tick,
least_index_range_tick,
}
} }
} }
@ -63,7 +55,7 @@ where
return 0; return 0;
} }
let index = (tick / self.least_index_range_tick).round() as usize; let index = (tick / self.range_tick).round() as usize;
index.min(self.domain.len().saturating_sub(1)) index.min(self.domain.len().saturating_sub(1))
} }
} }