pub struct RationalCurve<P: VectorSpace> {
pub segments: Vec<RationalSegment<P>>,
}
Expand description
A collection of RationalSegment
s chained into a single parametric curve.
Use any struct that implements the RationalGenerator
trait to create a new curve, such as
CubicNurbs
, or convert CubicCurve
using into/from
.
Fields§
§segments: Vec<RationalSegment<P>>
The segments in the curve
Implementations§
Source§impl<P: VectorSpace> RationalCurve<P>
impl<P: VectorSpace> RationalCurve<P>
Sourcepub fn position(&self, t: f32) -> P
pub fn position(&self, t: f32) -> P
Compute the position of a point on the 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 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 curve at t
.
Note that t
varies from 0..=(n_points - 3)
.
Sourcepub fn iter_samples<'a, 'b: 'a>(
&'b self,
subdivisions: usize,
sample_function: impl FnMut(&Self, f32) -> P + 'a,
) -> impl Iterator<Item = P> + 'a
pub fn iter_samples<'a, 'b: 'a>( &'b self, subdivisions: usize, sample_function: impl FnMut(&Self, f32) -> P + 'a, ) -> impl Iterator<Item = P> + '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) -> &[RationalSegment<P>]
pub fn segments(&self) -> &[RationalSegment<P>]
The list of segments contained in this RationalCurve
.
This spline’s global t
value is equal to how many segments it has.
All method accepting t
on RationalCurve
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: RationalSegment<P>)
pub fn push_segment(&mut self, segment: RationalSegment<P>)
Adds a segment to the curve.
Trait Implementations§
Source§impl<P: Clone + VectorSpace> Clone for RationalCurve<P>
impl<P: Clone + VectorSpace> Clone for RationalCurve<P>
Source§fn clone(&self) -> RationalCurve<P>
fn clone(&self) -> RationalCurve<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 + VectorSpace> Debug for RationalCurve<P>
impl<P: Debug + VectorSpace> Debug for RationalCurve<P>
Source§impl<P: VectorSpace> Extend<RationalSegment<P>> for RationalCurve<P>
impl<P: VectorSpace> Extend<RationalSegment<P>> for RationalCurve<P>
Source§fn extend<T: IntoIterator<Item = RationalSegment<P>>>(&mut self, iter: T)
fn extend<T: IntoIterator<Item = RationalSegment<P>>>(&mut self, iter: T)
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: VectorSpace> From<CubicCurve<P>> for RationalCurve<P>
impl<P: VectorSpace> From<CubicCurve<P>> for RationalCurve<P>
Source§fn from(value: CubicCurve<P>) -> Self
fn from(value: CubicCurve<P>) -> Self
Source§impl<P> FromReflect for RationalCurve<P>where
Self: Any + Send + Sync,
P: TypePath + VectorSpace,
Vec<RationalSegment<P>>: FromReflect + TypePath + RegisterForReflection,
impl<P> FromReflect for RationalCurve<P>where
Self: Any + Send + Sync,
P: TypePath + VectorSpace,
Vec<RationalSegment<P>>: FromReflect + TypePath + RegisterForReflection,
Source§fn from_reflect(reflect: &dyn Reflect) -> Option<Self>
fn from_reflect(reflect: &dyn Reflect) -> Option<Self>
Self
from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn Reflect>,
) -> Result<Self, Box<dyn Reflect>>
fn take_from_reflect( reflect: Box<dyn Reflect>, ) -> Result<Self, Box<dyn Reflect>>
Self
using,
constructing the value using from_reflect
if that fails. Read moreSource§impl<P> GetTypeRegistration for RationalCurve<P>where
Self: Any + Send + Sync,
P: TypePath + VectorSpace,
Vec<RationalSegment<P>>: FromReflect + TypePath + RegisterForReflection,
impl<P> GetTypeRegistration for RationalCurve<P>where
Self: Any + Send + Sync,
P: TypePath + VectorSpace,
Vec<RationalSegment<P>>: FromReflect + TypePath + 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: VectorSpace> IntoIterator for RationalCurve<P>
impl<P: VectorSpace> IntoIterator for RationalCurve<P>
Source§impl<P: PartialEq + VectorSpace> PartialEq for RationalCurve<P>
impl<P: PartialEq + VectorSpace> PartialEq for RationalCurve<P>
Source§impl<P> Reflect for RationalCurve<P>where
Self: Any + Send + Sync,
P: TypePath + VectorSpace,
Vec<RationalSegment<P>>: FromReflect + TypePath + RegisterForReflection,
impl<P> Reflect for RationalCurve<P>where
Self: Any + Send + Sync,
P: TypePath + VectorSpace,
Vec<RationalSegment<P>>: FromReflect + TypePath + RegisterForReflection,
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
&mut dyn Any
.Source§fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &dyn Reflect
fn as_reflect(&self) -> &dyn Reflect
Source§fn as_reflect_mut(&mut self) -> &mut dyn Reflect
fn as_reflect_mut(&mut self) -> &mut dyn Reflect
Source§fn clone_value(&self) -> Box<dyn Reflect>
fn clone_value(&self) -> Box<dyn Reflect>
Reflect
trait object. Read moreSource§fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
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<Self>) -> ReflectOwned
fn reflect_owned(self: Box<Self>) -> ReflectOwned
Source§fn reflect_partial_eq(&self, value: &dyn Reflect) -> Option<bool>
fn reflect_partial_eq(&self, value: &dyn Reflect) -> Option<bool>
Source§fn apply(&mut self, value: &(dyn Reflect + 'static))
fn apply(&mut self, value: &(dyn Reflect + 'static))
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§impl<P> Struct for RationalCurve<P>where
Self: Any + Send + Sync,
P: TypePath + VectorSpace,
Vec<RationalSegment<P>>: FromReflect + TypePath + RegisterForReflection,
impl<P> Struct for RationalCurve<P>where
Self: Any + Send + Sync,
P: TypePath + VectorSpace,
Vec<RationalSegment<P>>: FromReflect + TypePath + RegisterForReflection,
Source§fn field(&self, name: &str) -> Option<&dyn Reflect>
fn field(&self, name: &str) -> Option<&dyn Reflect>
name
as a &dyn Reflect
.Source§fn field_mut(&mut self, name: &str) -> Option<&mut dyn Reflect>
fn field_mut(&mut self, name: &str) -> Option<&mut dyn Reflect>
name
as a
&mut dyn Reflect
.Source§fn field_at(&self, index: usize) -> Option<&dyn Reflect>
fn field_at(&self, index: usize) -> Option<&dyn Reflect>
index
as a
&dyn Reflect
.Source§fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn Reflect>
fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn Reflect>
index
as a &mut dyn Reflect
.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 clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
DynamicStruct
.Source§impl<P> TypePath for RationalCurve<P>
impl<P> TypePath for RationalCurve<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 RationalCurve<P>where
Self: Any + Send + Sync,
P: TypePath + VectorSpace,
Vec<RationalSegment<P>>: FromReflect + TypePath + RegisterForReflection,
impl<P> Typed for RationalCurve<P>where
Self: Any + Send + Sync,
P: TypePath + VectorSpace,
Vec<RationalSegment<P>>: FromReflect + TypePath + RegisterForReflection,
impl<P: VectorSpace> StructuralPartialEq for RationalCurve<P>
Auto Trait Implementations§
impl<P> Freeze for RationalCurve<P>
impl<P> RefUnwindSafe for RationalCurve<P>where
P: RefUnwindSafe,
impl<P> Send for RationalCurve<P>where
P: Send,
impl<P> Sync for RationalCurve<P>where
P: Sync,
impl<P> Unpin for RationalCurve<P>where
P: Unpin,
impl<P> UnwindSafe for RationalCurve<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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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>
. Box<dyn Any>
can
then be further downcast
into Box<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>
. Rc<Any>
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> DowncastSync for T
impl<T> DowncastSync 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<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 Reflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn Reflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn Reflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn Reflect + '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 more