1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
pub trait Curve {
fn evaluate(&self, f64) -> (f64, f64);
}
#[derive(Clone, Copy, Debug)]
pub struct Trace<'l, T: 'l + Curve> {
curve: &'l T,
steps: usize,
step: usize,
}
impl<'l, T: Curve> Iterator for Trace<'l, T> {
type Item = (f64, f64);
fn next(&mut self) -> Option<(f64, f64)> {
let step = self.step;
if step < self.steps {
self.step += 1;
Some(self.curve.evaluate(step as f64 / ((self.steps - 1) as f64)))
} else {
None
}
}
}
pub mod bezier;