pub struct Polyline<T>(pub Vec<T>);Expand description
A curve composed of a chain of line segments.
The polyline is represented as a list of points, or vertices, with each pair of consecutive vertices sharing an edge.
Tuple Fields§
§0: Vec<T>Implementations§
Source§impl<T> Polyline<T>
impl<T> Polyline<T>
Sourcepub fn new(verts: impl IntoIterator<Item = T>) -> Self
pub fn new(verts: impl IntoIterator<Item = T>) -> Self
Creates a new polyline from an iterator of vertex points.
Sourcepub fn edges(&self) -> impl Iterator<Item = Edge<&T>> + '_
pub fn edges(&self) -> impl Iterator<Item = Edge<&T>> + '_
Returns an iterator over the line segments of self.
§Examples
use retrofire_core::geom::{Polyline, Edge};
use retrofire_core::math::{pt2, Point2};
let pts: [Point2; _] = [pt2(0.0, 0.0), pt2(1.0, 1.0), pt2(2.0, 1.0)];
let pline = Polyline::new(pts);
let mut edges = pline.edges();
assert_eq!(edges.next(), Some(Edge(&pts[0], &pts[1])));
assert_eq!(edges.next(), Some(Edge(&pts[1], &pts[2])));
assert_eq!(edges.next(), None);Trait Implementations§
Source§impl<T: Lerp + Clone> Parametric<T> for Polyline<T>
impl<T: Lerp + Clone> Parametric<T> for Polyline<T>
Source§fn eval(&self, t: f32) -> T
fn eval(&self, t: f32) -> T
Returns the point on self at t.
If the number of vertices in self is n > 1, the vertex at index
k < n corresponds to t = k / (n - 1). Intermediate values
of t are linearly interpolated between the two closest vertices.
Values t < 0 and t > 1 are clamped to 0 and 1 respectively.
A polyline with a single vertex returns the value of that vertex
for any value of t.
§Panics
If self has no vertices.
§Examples
use retrofire_core::geom::{Polyline, Edge};
use retrofire_core::math::{pt2, Point2, Parametric};
let pl = Polyline::<Point2>(
vec![pt2(0.0, 0.0), pt2(1.0, 2.0), pt2(2.0, 1.0)]);
assert_eq!(pl.eval(0.0), pl.0[0]);
assert_eq!(pl.eval(0.5), pl.0[1]);
assert_eq!(pl.eval(1.0), pl.0[2]);
// Values not corresponding to a vertex are interpolated:
assert_eq!(pl.eval(0.25), pt2(0.5, 1.0));
assert_eq!(pl.eval(0.75), pt2(1.5, 1.5));
// Values of t outside 0.0..=1.0 are clamped:
assert_eq!(pl.eval(-1.23), pl.eval(0.0));
assert_eq!(pl.eval(7.68), pl.eval(1.0));impl<T: Eq> Eq for Polyline<T>
impl<T> StructuralPartialEq for Polyline<T>
Auto Trait Implementations§
impl<T> Freeze for Polyline<T>
impl<T> RefUnwindSafe for Polyline<T>where
T: RefUnwindSafe,
impl<T> Send for Polyline<T>where
T: Send,
impl<T> Sync for Polyline<T>where
T: Sync,
impl<T> Unpin for Polyline<T>where
T: Unpin,
impl<T> UnwindSafe for Polyline<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more