plot(scale): Correct the least index (#1186)
This commit is contained in:
parent
1267857a8c
commit
7fb6000189
1 changed files with 6 additions and 14 deletions
|
|
@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue