pub struct BSpline<K, E, S> { /* private fields */ }
Expand description

BSpline curve.

See bspline module for more information.

Implementations§

source§

impl BSpline<Unknown, Unknown, Unknown>

source

pub fn builder() -> BSplineBuilder<Unknown, Unknown, Unknown, Unknown, Open>

Get a builder for bsplines.

The builder takes:

Examples
let bez = BSpline::builder()
    .clamped()
    .elements([20.0,100.0,0.0,200.0])
    .equidistant::<f64>()
    .degree(3)
    .normalized()
    .constant::<4>()    // degree + 1
    .build()?;
let mut iter = bez.take(5);
let expected = [20.0,53.75,65.0,98.75,200.0];
for i in 0..=4 {
    let val = iter.next().unwrap();
    assert_f64_near!(val, expected[i]);
}
source§

impl<K, E, S> BSpline<K, E, S>where E: DiscreteGenerator, K: SortedGenerator, S: Space<E::Output>,

source

pub fn new(elements: E, knots: K, space: S) -> Result<Self, BSplineError>

Creates a bspline curve of elements and knots given.

The resulting degree of the curve is elements.len() - knots.len() +1. The domain for the curve with degree p is knots[p-1] and knots[knots.len() - p -2].

The knots have to be sorted.

Errors

TooFewElements if there are less than two elements. InvalidDegree if degree is not at least 1 and at most the number of elements - 1. TooSmallWorkspace if the workspace is not bigger than the degree of the curve. IncongruousElementsKnots either if the amount of knots is less than the amount of elements or if the anoumt of knots is more than double the amount of elements.

source§

impl<K, E, S> BSpline<K, E, S>where E: DiscreteGenerator, K: SortedGenerator, S: Space<E::Output>,

source

pub fn new_unchecked(elements: E, knots: K, space: S) -> Self

Creates a bspline curve of elements and knots given.

The resulting degree of the curve is elements.len() - knots.len() + 1. The domain for the curve with degree p is knots[p-1] and knots[knots.len() - p -2]. The knots have to be sorted.

Panics

The degree has to be at least 1, otherwise the library may panic at any time.

Trait Implementations§

source§

impl<K: Clone, E: Clone, S: Clone> Clone for BSpline<K, E, S>

source§

fn clone(&self) -> BSpline<K, E, S>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K, E, S, R> Curve<R> for BSpline<K, E, S>where E: DiscreteGenerator, S: Space<E::Output>, E::Output: Merge<R> + Copy, R: Real + Debug, K: SortedGenerator<Output = R>,

source§

fn domain(&self) -> [R; 2]

The domain in which the curve uses interpolation. Read more
source§

fn slice<B>(self, bounds: B) -> Slice<Self, R>where Self: Sized, B: RangeBounds<R>,

Take a slice of a curve. Read more
source§

fn clamp(self) -> Clamp<Self>where Self: Sized,

Clamp the input of a curve to its domain. Read more
source§

impl<K: Debug, E: Debug, S: Debug> Debug for BSpline<K, E, S>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K, E, S, R> Generator<R> for BSpline<K, E, S>where E: DiscreteGenerator, S: Space<E::Output>, E::Output: Merge<R> + Copy, R: Real + Debug, K: SortedGenerator<Output = R>,

§

type Output = <E as Generator<usize>>::Output

The element outputted
source§

fn gen(&self, scalar: R) -> E::Output

Method to generate the element at the given input
source§

fn extract<I, J>(self, iterator: I) -> Extract<Self, J> where Self: Sized, I: IntoIterator<IntoIter = J>, J: Iterator<Item = Input>,

Helper function if one wants to extract values from the interpolation. Read more
source§

fn stack<G>(self, gen: G) -> Stack<Self, G>where Self: Sized,

Stack two generators together Read more
source§

fn composite<G>(self, gen: G) -> Composite<Self, G>where Self: Sized,

Takes two generators and creates a new generator pipelining both generators. Read more
source§

fn by_ref(&self) -> &Self

Get a reference of the generator. Read more
source§

fn sample<I, J>(&self, iterator: I) -> Extract<&Self, J> where Self: Sized, I: IntoIterator<IntoIter = J>, J: Iterator<Item = Input>,

Helper function if one wants to sample values from the interpolation. Read more
source§

impl<K: PartialEq, E: PartialEq, S: PartialEq> PartialEq<BSpline<K, E, S>> for BSpline<K, E, S>

source§

fn eq(&self, other: &BSpline<K, E, S>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<K: Copy, E: Copy, S: Copy> Copy for BSpline<K, E, S>

source§

impl<K, E, S> StructuralPartialEq for BSpline<K, E, S>

Auto Trait Implementations§

§

impl<K, E, S> RefUnwindSafe for BSpline<K, E, S>where E: RefUnwindSafe, K: RefUnwindSafe, S: RefUnwindSafe,

§

impl<K, E, S> Send for BSpline<K, E, S>where E: Send, K: Send, S: Send,

§

impl<K, E, S> Sync for BSpline<K, E, S>where E: Sync, K: Sync, S: Sync,

§

impl<K, E, S> Unpin for BSpline<K, E, S>where E: Unpin, K: Unpin, S: Unpin,

§

impl<K, E, S> UnwindSafe for BSpline<K, E, S>where E: UnwindSafe, K: UnwindSafe, S: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.