pub struct CubicBezierSpline {
pub segments: Vec<[Vec3; 4]>,
pub closed: bool,
/* private fields */
}Fields§
§segments: Vec<[Vec3; 4]>Control points in groups of 4: P0, P1, P2, P3 per segment Adjacent segments share endpoints: P3 of seg i == P0 of seg i+1
closed: boolImplementations§
Source§impl CubicBezierSpline
impl CubicBezierSpline
pub fn new(segments: Vec<[Vec3; 4]>) -> Self
pub fn from_points(points: &[Vec3]) -> Self
Sourcepub fn de_casteljau(p0: Vec3, p1: Vec3, p2: Vec3, p3: Vec3, t: f32) -> Vec3
pub fn de_casteljau(p0: Vec3, p1: Vec3, p2: Vec3, p3: Vec3, t: f32) -> Vec3
De Casteljau evaluation at t in [0,1] for a single segment
Sourcepub fn de_casteljau_split(
p0: Vec3,
p1: Vec3,
p2: Vec3,
p3: Vec3,
t: f32,
) -> ([Vec3; 4], [Vec3; 4])
pub fn de_casteljau_split( p0: Vec3, p1: Vec3, p2: Vec3, p3: Vec3, t: f32, ) -> ([Vec3; 4], [Vec3; 4])
De Casteljau split: returns left and right halves
pub fn num_segments(&self) -> usize
pub fn evaluate(&self, t: f32) -> Vec3
pub fn evaluate_derivative(&self, t: f32) -> Vec3
pub fn evaluate_derivative_correct(&self, t: f32) -> Vec3
pub fn evaluate_second_derivative_correct(&self, t: f32) -> Vec3
pub fn curvature_at(&self, t: f32) -> f32
pub fn rebuild_arc_length_table(&mut self)
pub fn total_arc_length(&self) -> f32
pub fn t_at_arc_length(&self, s: f32) -> f32
pub fn evaluate_at_arc_length(&self, s: f32) -> Vec3
pub fn split_segment(&mut self, seg: usize, u: f32)
pub fn nearest_point(&self, query: Vec3) -> (f32, Vec3)
pub fn frenet_frame_at(&self, t: f32) -> FrenetFrame
pub fn bounding_box(&self) -> (Vec3, Vec3)
Trait Implementations§
Source§impl Clone for CubicBezierSpline
impl Clone for CubicBezierSpline
Auto Trait Implementations§
impl Freeze for CubicBezierSpline
impl RefUnwindSafe for CubicBezierSpline
impl Send for CubicBezierSpline
impl Sync for CubicBezierSpline
impl Unpin for CubicBezierSpline
impl UnsafeUnpin for CubicBezierSpline
impl UnwindSafe for CubicBezierSpline
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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>
Convert
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>
Convert
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)
Convert
&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)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.