aboutsummaryrefslogtreecommitdiff
path: root/src/dynamics/solver/joint_constraint/fixed_position_constraint.rs
diff options
context:
space:
mode:
authorCrozet Sébastien <developer@crozet.re>2021-05-25 11:00:13 +0200
committerCrozet Sébastien <developer@crozet.re>2021-05-25 11:00:13 +0200
commit1bef66fea941307a7305ddaebdb0abe3d0cb281f (patch)
tree450bc3cd2fd611f91cb7d7809edcc4260f043b0b /src/dynamics/solver/joint_constraint/fixed_position_constraint.rs
parent47139323e01f978a94ed7aa2c33bbf63b00f4c30 (diff)
downloadrapier-1bef66fea941307a7305ddaebdb0abe3d0cb281f.tar.gz
rapier-1bef66fea941307a7305ddaebdb0abe3d0cb281f.tar.bz2
rapier-1bef66fea941307a7305ddaebdb0abe3d0cb281f.zip
Add prelude + use vectors for setting linvel/translation in builders
Diffstat (limited to 'src/dynamics/solver/joint_constraint/fixed_position_constraint.rs')
-rw-r--r--src/dynamics/solver/joint_constraint/fixed_position_constraint.rs34
1 files changed, 17 insertions, 17 deletions
diff --git a/src/dynamics/solver/joint_constraint/fixed_position_constraint.rs b/src/dynamics/solver/joint_constraint/fixed_position_constraint.rs
index 239138f..f8945c3 100644
--- a/src/dynamics/solver/joint_constraint/fixed_position_constraint.rs
+++ b/src/dynamics/solver/joint_constraint/fixed_position_constraint.rs
@@ -8,8 +8,8 @@ use crate::utils::WAngularInertia;
pub(crate) struct FixedPositionConstraint {
position1: usize,
position2: usize,
- local_anchor1: Isometry<Real>,
- local_anchor2: Isometry<Real>,
+ local_frame1: Isometry<Real>,
+ local_frame2: Isometry<Real>,
local_com1: Point<Real>,
local_com2: Point<Real>,
im1: Real,
@@ -38,8 +38,8 @@ impl FixedPositionConstraint {
let ang_inv_lhs = (ii1 + ii2).inverse();
Self {
- local_anchor1: cparams.local_anchor1,
- local_anchor2: cparams.local_anchor2,
+ local_frame1: cparams.local_frame1,
+ local_frame2: cparams.local_frame2,
position1: ids1.active_set_offset,
position2: ids2.active_set_offset,
im1,
@@ -58,8 +58,8 @@ impl FixedPositionConstraint {
let mut position2 = positions[self.position2 as usize];
// Angular correction.
- let anchor1 = position1 * self.local_anchor1;
- let anchor2 = position2 * self.local_anchor2;
+ let anchor1 = position1 * self.local_frame1;
+ let anchor2 = position2 * self.local_frame2;
let ang_err = anchor2.rotation * anchor1.rotation.inverse();
#[cfg(feature = "dim3")]
let ang_impulse = self
@@ -75,8 +75,8 @@ impl FixedPositionConstraint {
Rotation::new(self.ii2.transform_vector(-ang_impulse)) * position2.rotation;
// Linear correction.
- let anchor1 = position1 * Point::from(self.local_anchor1.translation.vector);
- let anchor2 = position2 * Point::from(self.local_anchor2.translation.vector);
+ let anchor1 = position1 * Point::from(self.local_frame1.translation.vector);
+ let anchor2 = position2 * Point::from(self.local_frame2.translation.vector);
let err = anchor2 - anchor1;
let impulse = err * (self.lin_inv_lhs * params.joint_erp);
position1.translation.vector += self.im1 * impulse;
@@ -91,7 +91,7 @@ impl FixedPositionConstraint {
pub(crate) struct FixedPositionGroundConstraint {
position2: usize,
anchor1: Isometry<Real>,
- local_anchor2: Isometry<Real>,
+ local_frame2: Isometry<Real>,
local_com2: Point<Real>,
im2: Real,
ii2: AngularInertia<Real>,
@@ -109,19 +109,19 @@ impl FixedPositionGroundConstraint {
let (mprops2, ids2) = rb2;
let anchor1;
- let local_anchor2;
+ let local_frame2;
if flipped {
- anchor1 = poss1.next_position * cparams.local_anchor2;
- local_anchor2 = cparams.local_anchor1;
+ anchor1 = poss1.next_position * cparams.local_frame2;
+ local_frame2 = cparams.local_frame1;
} else {
- anchor1 = poss1.next_position * cparams.local_anchor1;
- local_anchor2 = cparams.local_anchor2;
+ anchor1 = poss1.next_position * cparams.local_frame1;
+ local_frame2 = cparams.local_frame2;
};
Self {
anchor1,
- local_anchor2,
+ local_frame2,
position2: ids2.active_set_offset,
im2: mprops2.effective_inv_mass,
ii2: mprops2.effective_world_inv_inertia_sqrt.squared(),
@@ -134,13 +134,13 @@ impl FixedPositionGroundConstraint {
let mut position2 = positions[self.position2 as usize];
// Angular correction.
- let anchor2 = position2 * self.local_anchor2;
+ let anchor2 = position2 * self.local_frame2;
let ang_err = anchor2.rotation * self.anchor1.rotation.inverse();
position2.rotation = ang_err.powf(-params.joint_erp) * position2.rotation;
// Linear correction.
let anchor1 = Point::from(self.anchor1.translation.vector);
- let anchor2 = position2 * Point::from(self.local_anchor2.translation.vector);
+ let anchor2 = position2 * Point::from(self.local_frame2.translation.vector);
let err = anchor2 - anchor1;
// NOTE: no need to divide by im2 just to multiply right after.
let impulse = err * params.joint_erp;