curve/lib.rs
1//! Curves.
2//!
3//! # Examples
4//!
5//! Trace a Bézier curve:
6//!
7//! ```
8//! use curve::bezier::Linear;
9//! use curve::Trace;
10//!
11//! let curve = (Linear::new(1.0, 5.0), Linear::new(2.0, 3.0));
12//! let points = Trace::new(curve, 3).collect::<Vec<_>>();
13//! assert_eq!(points, vec![(1.0, 2.0), (3.0, 2.5), (5.0, 3.0)]);
14//! ```
15//!
16//! Approximate a cubic Bézier curve with a sequence of quadratic:
17//!
18//! ```
19//! use curve::bezier::goodness::CrudeIndependentAbsolute;
20//! use curve::bezier::Cubic;
21//! use curve::Approximation;
22//!
23//! let goodness = CrudeIndependentAbsolute::new(1.0, f64::MAX, usize::MAX);
24//! let cubic = (Cubic::new(0.0, 0.0, 90.0, 100.0), Cubic::new(0.0, 50.0, 0.0, 0.0));
25//! let quadratics = Approximation::new(cubic, goodness).collect::<Vec<_>>();
26//! assert_eq!(quadratics.len(), 4);
27//! ```
28
29pub mod bezier;
30
31mod align;
32mod approximation;
33mod evaluate;
34mod expand;
35mod goodness;
36mod reduce;
37mod subdivide;
38mod trace;
39
40pub use align::Align;
41pub use approximation::Approximation;
42pub use evaluate::Evaluate;
43pub use expand::Expand;
44pub use goodness::Goodness;
45pub use reduce::Reduce;
46pub use subdivide::Subdivide;
47pub use trace::Trace;