pub struct Sweep {
pub local_center: Vector,
pub c1: Vector,
pub c2: Vector,
pub q1: Rotation,
pub q2: Rotation,
}Expand description
Describes the motion of a rigid body over a timestep as linear interpolation between two endpoint poses: the center of mass moves on a straight line while the rotation is interpolated with a normalized lerp (nlerp).
This is a common motion model for continuous collision detection. It is exact at both endpoints and a good approximation in between as long as the rotation delta stays below ~45°.
Fields§
§local_center: VectorThe center of mass expressed in the shape’s local frame.
c1: VectorThe world-space center of mass at the start of the sweep.
c2: VectorThe world-space center of mass at the end of the sweep.
q1: RotationThe rotation at the start of the sweep.
q2: RotationThe rotation at the end of the sweep.
Implementations§
Source§impl Sweep
impl Sweep
Sourcepub fn from_poses(start: &Pose, end: &Pose, local_center: Vector) -> Self
pub fn from_poses(start: &Pose, end: &Pose, local_center: Vector) -> Self
Builds a sweep from the start and end poses of a shape’s local frame.
Sourcepub fn constant(pose: &Pose, local_center: Vector) -> Self
pub fn constant(pose: &Pose, local_center: Vector) -> Self
A degenerate sweep holding the shape stationary at the given pose.
Sourcepub fn transform_at(&self, t: f32) -> Pose
pub fn transform_at(&self, t: f32) -> Pose
The pose of the shape’s local frame at time t ∈ [0, 1].
The center of mass is lerped, the rotation is nlerped, and the local-frame origin is recovered by un-shifting the local center.
Sourcepub fn final_transform(&self) -> Pose
pub fn final_transform(&self) -> Pose
The pose of the shape’s local frame at the end of the sweep (t = 1), computed exactly.
Trait Implementations§
impl Copy for Sweep
impl StructuralPartialEq for Sweep
Auto Trait Implementations§
impl Freeze for Sweep
impl RefUnwindSafe for Sweep
impl Send for Sweep
impl Sync for Sweep
impl Unpin for Sweep
impl UnsafeUnpin for Sweep
impl UnwindSafe for Sweep
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> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
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 moreimpl<T> Scalar for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.