pub struct ShapeMatching {
pub stiffness: Real,
/* private fields */
}Expand description
Rigid shape-matching constraint.
Fields§
§stiffness: RealStiffness α ∈ [0, 1]. 0 = no constraint, 1 = full rigid matching.
Implementations§
Source§impl ShapeMatching
impl ShapeMatching
Sourcepub fn new(positions: &[Vec3], masses: &[Real], stiffness: Real) -> Self
pub fn new(positions: &[Vec3], masses: &[Real], stiffness: Real) -> Self
Create a new shape-matching constraint from the current rest positions and masses.
The rest positions are stored relative to their (mass-weighted) centre
of mass so that the deformation matrix A can be computed cheaply at
runtime.
Sourcepub fn goal_positions(&self, positions: &[Vec3]) -> Vec<Vec3> ⓘ
pub fn goal_positions(&self, positions: &[Vec3]) -> Vec<Vec3> ⓘ
Compute the goal positions for each particle by:
- Computing the current centre of mass
xcm. - Building the deformation matrix
A = Σ mᵢ (xᵢ − xcm) qᵢᵀwhereqᵢis the rest position of particle i relative to the rest centre of mass. - Extracting the rotation
Rvia polar decomposition ofA. - Computing goal positions as
goalᵢ = stiffness * (R qᵢ + xcm) + (1 − stiffness) * xᵢ.
Trait Implementations§
Source§impl Clone for ShapeMatching
impl Clone for ShapeMatching
Source§fn clone(&self) -> ShapeMatching
fn clone(&self) -> ShapeMatching
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for ShapeMatching
impl RefUnwindSafe for ShapeMatching
impl Send for ShapeMatching
impl Sync for ShapeMatching
impl Unpin for ShapeMatching
impl UnsafeUnpin for ShapeMatching
impl UnwindSafe for ShapeMatching
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
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
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.