pub struct HingeConstraint {
pub body_a: BodyHandle,
pub body_b: BodyHandle,
pub anchor_a: Vec2,
pub anchor_b: Vec2,
pub limits: Option<(f32, f32)>,
pub motor: Option<(f32, f32)>,
pub compliance: f32,
/* private fields */
}Expand description
Hinge (revolute) joint: two bodies share a common anchor. Allows rotation around the Z-axis. Supports angular limits and a velocity motor.
Fields§
§body_a: BodyHandle§body_b: BodyHandle§anchor_a: Vec2§anchor_b: Vec2§limits: Option<(f32, f32)>Angular limits: (min, max) relative angle in radians.
motor: Option<(f32, f32)>Motor: (target_velocity, max_torque).
compliance: f32Compliance for soft limits (0 = rigid).
Implementations§
Source§impl HingeConstraint
impl HingeConstraint
pub fn new( body_a: BodyHandle, anchor_a: Vec2, body_b: BodyHandle, anchor_b: Vec2, ) -> Self
Sourcepub fn with_limits(self, min: f32, max: f32) -> Self
pub fn with_limits(self, min: f32, max: f32) -> Self
Add angular limits in radians (relative angle of B w.r.t. A).
Sourcepub fn with_motor(self, target_velocity: f32, max_torque: f32) -> Self
pub fn with_motor(self, target_velocity: f32, max_torque: f32) -> Self
Add a rotational motor.
pub fn with_compliance(self, c: f32) -> Self
Trait Implementations§
Source§impl Clone for HingeConstraint
impl Clone for HingeConstraint
Source§fn clone(&self) -> HingeConstraint
fn clone(&self) -> HingeConstraint
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Constraint for HingeConstraint
impl Constraint for HingeConstraint
Source§fn prepare(&mut self, _bodies: &HashMap<BodyHandle, BodyState>, _dt: f32)
fn prepare(&mut self, _bodies: &HashMap<BodyHandle, BodyState>, _dt: f32)
Prepare the constraint for the current step (pre-compute cached values).
Source§fn compute_cdot(&self, bodies: &HashMap<BodyHandle, BodyState>) -> f32
fn compute_cdot(&self, bodies: &HashMap<BodyHandle, BodyState>) -> f32
Compute the velocity constraint violation (Cdot = J * v).
Source§fn compute_c(&self, bodies: &HashMap<BodyHandle, BodyState>) -> f32
fn compute_c(&self, bodies: &HashMap<BodyHandle, BodyState>) -> f32
Compute the position constraint violation (C).
Source§fn get_compliance(&self) -> f32
fn get_compliance(&self) -> f32
XPBD compliance (inverse stiffness). 0 = rigid.
Source§fn effective_mass(&self, bodies: &HashMap<BodyHandle, BodyState>) -> f32
fn effective_mass(&self, bodies: &HashMap<BodyHandle, BodyState>) -> f32
Compute effective constraint mass (1 / (J M^-1 J^T)).
Source§fn apply_impulse(
&self,
bodies: &mut HashMap<BodyHandle, BodyState>,
lambda: f32,
)
fn apply_impulse( &self, bodies: &mut HashMap<BodyHandle, BodyState>, lambda: f32, )
Apply the corrective impulse to body states.
Source§fn solve_velocity(
&mut self,
bodies: &mut HashMap<BodyHandle, BodyState>,
dt: f32,
)
fn solve_velocity( &mut self, bodies: &mut HashMap<BodyHandle, BodyState>, dt: f32, )
Solve velocity constraint (one iteration).
Source§fn solve_position(
&mut self,
bodies: &mut HashMap<BodyHandle, BodyState>,
dt: f32,
)
fn solve_position( &mut self, bodies: &mut HashMap<BodyHandle, BodyState>, dt: f32, )
Solve position constraint using XPBD (one sub-step).
Source§fn accumulated_impulse(&self) -> f32
fn accumulated_impulse(&self) -> f32
Accumulated impulse for warm starting.
fn reset_accumulated(&mut self)
fn add_accumulated(&mut self, d: f32)
Source§fn body_handles(&self) -> Vec<BodyHandle>
fn body_handles(&self) -> Vec<BodyHandle>
Bodies involved in this constraint.
Source§fn bias(&self, bodies: &HashMap<BodyHandle, BodyState>, dt: f32) -> f32
fn bias(&self, bodies: &HashMap<BodyHandle, BodyState>, dt: f32) -> f32
Baumgarte position bias.
Source§fn impulse_bounds(&self) -> (f32, f32)
fn impulse_bounds(&self) -> (f32, f32)
Whether this constraint has an upper/lower impulse clamp.
Auto Trait Implementations§
impl Freeze for HingeConstraint
impl RefUnwindSafe for HingeConstraint
impl Send for HingeConstraint
impl Sync for HingeConstraint
impl Unpin for HingeConstraint
impl UnsafeUnpin for HingeConstraint
impl UnwindSafe for HingeConstraint
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<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.