pub struct CubicCurve<P>where
P: VectorSpace,{ /* private fields */ }Expand description
A collection of CubicSegments chained into a single parametric curve. It is a Curve
with domain [0, N], where N is its number of segments.
Use any struct that implements the CubicGenerator trait to create a new curve, such as
CubicBezier.
Implementations§
Source§impl<P> CubicCurve<P>where
P: VectorSpace<Scalar = f32>,
impl<P> CubicCurve<P>where
P: VectorSpace<Scalar = f32>,
Sourcepub fn from_segments(
segments: impl IntoIterator<Item = CubicSegment<P>>,
) -> Option<CubicCurve<P>>
pub fn from_segments( segments: impl IntoIterator<Item = CubicSegment<P>>, ) -> Option<CubicCurve<P>>
Create a new curve from a collection of segments. If the collection of segments is empty,
a curve cannot be built and None will be returned instead.
Sourcepub fn position(&self, t: f32) -> P
pub fn position(&self, t: f32) -> P
Compute the position of a point on the cubic curve at the parametric value t.
Note that t varies from 0..=(n_points - 3).
Sourcepub fn velocity(&self, t: f32) -> P
pub fn velocity(&self, t: f32) -> P
Compute the first derivative with respect to t at t. This is the instantaneous velocity of
a point on the cubic curve at t.
Note that t varies from 0..=(n_points - 3).
Sourcepub fn acceleration(&self, t: f32) -> P
pub fn acceleration(&self, t: f32) -> P
Compute the second derivative with respect to t at t. This is the instantaneous
acceleration of a point on the cubic curve at t.
Note that t varies from 0..=(n_points - 3).
Sourcepub fn iter_samples<'a, 'b>(
&'b self,
subdivisions: usize,
sample_function: impl FnMut(&CubicCurve<P>, f32) -> P + 'a,
) -> impl Iterator<Item = P> + 'awhere
'b: 'a,
pub fn iter_samples<'a, 'b>(
&'b self,
subdivisions: usize,
sample_function: impl FnMut(&CubicCurve<P>, f32) -> P + 'a,
) -> impl Iterator<Item = P> + 'awhere
'b: 'a,
A flexible iterator used to sample curves with arbitrary functions.
This splits the curve into subdivisions of evenly spaced t values across the
length of the curve from start (t = 0) to end (t = n), where n = self.segment_count(),
returning an iterator evaluating the curve with the supplied sample_function at each t.
For subdivisions = 2, this will split the curve into two lines, or three points, and
return an iterator with 3 items, the three points, one at the start, middle, and end.
Sourcepub fn segments(&self) -> &[CubicSegment<P>]
pub fn segments(&self) -> &[CubicSegment<P>]
The list of segments contained in this CubicCurve.
This spline’s global t value is equal to how many segments it has.
All method accepting t on CubicCurve depends on the global t.
When sampling over the entire curve, you should either use one of the
iter_* methods or account for the segment count using curve.segments().len().
Sourcepub fn iter_positions(&self, subdivisions: usize) -> impl Iterator<Item = P>
pub fn iter_positions(&self, subdivisions: usize) -> impl Iterator<Item = P>
Iterate over the curve split into subdivisions, sampling the position at each step.
Sourcepub fn iter_velocities(&self, subdivisions: usize) -> impl Iterator<Item = P>
pub fn iter_velocities(&self, subdivisions: usize) -> impl Iterator<Item = P>
Iterate over the curve split into subdivisions, sampling the velocity at each step.
Sourcepub fn iter_accelerations(&self, subdivisions: usize) -> impl Iterator<Item = P>
pub fn iter_accelerations(&self, subdivisions: usize) -> impl Iterator<Item = P>
Iterate over the curve split into subdivisions, sampling the acceleration at each step.
Sourcepub fn push_segment(&mut self, segment: CubicSegment<P>)
pub fn push_segment(&mut self, segment: CubicSegment<P>)
Adds a segment to the curve
Trait Implementations§
Source§impl<P> Clone for CubicCurve<P>where
P: Clone + VectorSpace,
impl<P> Clone for CubicCurve<P>where
P: Clone + VectorSpace,
Source§fn clone(&self) -> CubicCurve<P>
fn clone(&self) -> CubicCurve<P>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<P> Debug for CubicCurve<P>where
P: Debug + VectorSpace,
impl<P> Debug for CubicCurve<P>where
P: Debug + VectorSpace,
Source§impl<P> Extend<CubicSegment<P>> for CubicCurve<P>where
P: VectorSpace,
impl<P> Extend<CubicSegment<P>> for CubicCurve<P>where
P: VectorSpace,
Source§fn extend<T>(&mut self, iter: T)where
T: IntoIterator<Item = CubicSegment<P>>,
fn extend<T>(&mut self, iter: T)where
T: IntoIterator<Item = CubicSegment<P>>,
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl<P> From<CubicCurve<P>> for RationalCurve<P>where
P: VectorSpace,
impl<P> From<CubicCurve<P>> for RationalCurve<P>where
P: VectorSpace,
Source§fn from(value: CubicCurve<P>) -> RationalCurve<P>
fn from(value: CubicCurve<P>) -> RationalCurve<P>
Source§impl<P> FromReflect for CubicCurve<P>where
P: VectorSpace + TypePath,
CubicCurve<P>: Any + Send + Sync,
Vec<CubicSegment<P>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<P> FromReflect for CubicCurve<P>where
P: VectorSpace + TypePath,
CubicCurve<P>: Any + Send + Sync,
Vec<CubicSegment<P>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn from_reflect(
reflect: &(dyn PartialReflect + 'static),
) -> Option<CubicCurve<P>>
fn from_reflect( reflect: &(dyn PartialReflect + 'static), ) -> Option<CubicCurve<P>>
Self from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn PartialReflect>,
) -> Result<Self, Box<dyn PartialReflect>>
fn take_from_reflect( reflect: Box<dyn PartialReflect>, ) -> Result<Self, Box<dyn PartialReflect>>
Self using,
constructing the value using from_reflect if that fails. Read moreSource§impl<P> GetTypeRegistration for CubicCurve<P>where
P: VectorSpace + TypePath,
CubicCurve<P>: Any + Send + Sync,
Vec<CubicSegment<P>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<P> GetTypeRegistration for CubicCurve<P>where
P: VectorSpace + TypePath,
CubicCurve<P>: Any + Send + Sync,
Vec<CubicSegment<P>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Source§impl<P> IntoIterator for CubicCurve<P>where
P: VectorSpace,
impl<P> IntoIterator for CubicCurve<P>where
P: VectorSpace,
Source§type IntoIter = <Vec<CubicSegment<P>> as IntoIterator>::IntoIter
type IntoIter = <Vec<CubicSegment<P>> as IntoIterator>::IntoIter
Source§type Item = CubicSegment<P>
type Item = CubicSegment<P>
Source§fn into_iter(self) -> <CubicCurve<P> as IntoIterator>::IntoIter
fn into_iter(self) -> <CubicCurve<P> as IntoIterator>::IntoIter
Source§impl<P> PartialEq for CubicCurve<P>where
P: PartialEq + VectorSpace,
impl<P> PartialEq for CubicCurve<P>where
P: PartialEq + VectorSpace,
Source§impl<P> PartialReflect for CubicCurve<P>where
P: VectorSpace + TypePath,
CubicCurve<P>: Any + Send + Sync,
Vec<CubicSegment<P>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<P> PartialReflect for CubicCurve<P>where
P: VectorSpace + TypePath,
CubicCurve<P>: Any + Send + Sync,
Vec<CubicSegment<P>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn try_apply(
&mut self,
value: &(dyn PartialReflect + 'static),
) -> Result<(), ApplyError>
fn try_apply( &mut self, value: &(dyn PartialReflect + 'static), ) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_owned(self: Box<CubicCurve<P>>) -> ReflectOwned
fn reflect_owned(self: Box<CubicCurve<P>>) -> ReflectOwned
Source§fn try_into_reflect(
self: Box<CubicCurve<P>>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<CubicCurve<P>>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Source§fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
Source§fn into_partial_reflect(self: Box<CubicCurve<P>>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<CubicCurve<P>>) -> Box<dyn PartialReflect>
Source§fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
Source§fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
Source§fn reflect_partial_eq(
&self,
value: &(dyn PartialReflect + 'static),
) -> Option<bool>
fn reflect_partial_eq( &self, value: &(dyn PartialReflect + 'static), ) -> Option<bool>
Source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Source§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Self using reflection. Read moreSource§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
Source§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
PartialReflect, combines reflect_clone and
take in a useful fashion, automatically constructing an appropriate
ReflectCloneError if the downcast fails. Read moreSource§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§impl<P> Reflect for CubicCurve<P>where
P: VectorSpace + TypePath,
CubicCurve<P>: Any + Send + Sync,
Vec<CubicSegment<P>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<P> Reflect for CubicCurve<P>where
P: VectorSpace + TypePath,
CubicCurve<P>: Any + Send + Sync,
Vec<CubicSegment<P>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn into_any(self: Box<CubicCurve<P>>) -> Box<dyn Any>
fn into_any(self: Box<CubicCurve<P>>) -> Box<dyn Any>
Box<dyn Any>. Read moreSource§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut dyn Any. Read moreSource§fn into_reflect(self: Box<CubicCurve<P>>) -> Box<dyn Reflect>
fn into_reflect(self: Box<CubicCurve<P>>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
Source§fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
Source§impl<P> Struct for CubicCurve<P>where
P: VectorSpace + TypePath,
CubicCurve<P>: Any + Send + Sync,
Vec<CubicSegment<P>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<P> Struct for CubicCurve<P>where
P: VectorSpace + TypePath,
CubicCurve<P>: Any + Send + Sync,
Vec<CubicSegment<P>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn field(&self, name: &str) -> Option<&(dyn PartialReflect + 'static)>
fn field(&self, name: &str) -> Option<&(dyn PartialReflect + 'static)>
name as a &dyn PartialReflect.Source§fn field_mut(
&mut self,
name: &str,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_mut( &mut self, name: &str, ) -> Option<&mut (dyn PartialReflect + 'static)>
name as a
&mut dyn PartialReflect.Source§fn field_at(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
fn field_at(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
index as a
&dyn PartialReflect.Source§fn field_at_mut(
&mut self,
index: usize,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_at_mut( &mut self, index: usize, ) -> Option<&mut (dyn PartialReflect + 'static)>
index
as a &mut dyn PartialReflect.Source§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
index.Source§fn iter_fields(&self) -> FieldIter<'_> ⓘ
fn iter_fields(&self) -> FieldIter<'_> ⓘ
Source§fn to_dynamic_struct(&self) -> DynamicStruct
fn to_dynamic_struct(&self) -> DynamicStruct
DynamicStruct from this struct.Source§fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
None if TypeInfo is not available.Source§impl<P> TypePath for CubicCurve<P>
impl<P> TypePath for CubicCurve<P>
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
Source§impl<P> Typed for CubicCurve<P>where
P: VectorSpace + TypePath,
CubicCurve<P>: Any + Send + Sync,
Vec<CubicSegment<P>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<P> Typed for CubicCurve<P>where
P: VectorSpace + TypePath,
CubicCurve<P>: Any + Send + Sync,
Vec<CubicSegment<P>>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl<P> StructuralPartialEq for CubicCurve<P>where
P: VectorSpace,
Auto Trait Implementations§
impl<P> Freeze for CubicCurve<P>
impl<P> RefUnwindSafe for CubicCurve<P>where
P: RefUnwindSafe,
impl<P> Send for CubicCurve<P>where
P: Send,
impl<P> Sync for CubicCurve<P>where
P: Sync,
impl<P> Unpin for CubicCurve<P>where
P: Unpin,
impl<P> UnwindSafe for CubicCurve<P>where
P: 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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name.Source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> DynamicTyped for Twhere
T: Typed,
impl<T> DynamicTyped for Twhere
T: Typed,
Source§fn reflect_type_info(&self) -> &'static TypeInfo
fn reflect_type_info(&self) -> &'static TypeInfo
Typed::type_info.Source§impl<S> GetField for Swhere
S: Struct,
impl<S> GetField for Swhere
S: Struct,
Source§impl<T> GetPath for T
impl<T> GetPath for T
Source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
path. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
path. Read moreSource§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
path. Read moreSource§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
path. Read moreSource§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more