diff options
| author | Crozet Sébastien <developer@crozet.re> | 2021-02-22 13:58:43 +0100 |
|---|---|---|
| committer | Crozet Sébastien <developer@crozet.re> | 2021-02-22 13:58:43 +0100 |
| commit | 4c9138fd2b8413a44ea665a2db5d245370ff54fe (patch) | |
| tree | d941bba903ad4dc7dcb4289d7fb37821ef2c8b54 /src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs | |
| parent | 052a5a5fc04e36f7aac7a2fa50af352e2ac2bf0a (diff) | |
| download | rapier-4c9138fd2b8413a44ea665a2db5d245370ff54fe.tar.gz rapier-4c9138fd2b8413a44ea665a2db5d245370ff54fe.tar.bz2 rapier-4c9138fd2b8413a44ea665a2db5d245370ff54fe.zip | |
Some minor cleanup and joint constraint refactoring.
Diffstat (limited to 'src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs')
| -rw-r--r-- | src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs b/src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs index ef3a1ba..c1975da 100644 --- a/src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs +++ b/src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs @@ -209,10 +209,7 @@ impl RevoluteVelocityConstraint { mj_lambdas[self.mj_lambda2 as usize] = mj_lambda2; } - pub fn solve(&mut self, mj_lambdas: &mut [DeltaVel<Real>]) { - let mut mj_lambda1 = mj_lambdas[self.mj_lambda1 as usize]; - let mut mj_lambda2 = mj_lambdas[self.mj_lambda2 as usize]; - + fn solve_dofs(&mut self, mj_lambda1: &mut DeltaVel<Real>, mj_lambda2: &mut DeltaVel<Real>) { let ang_vel1 = self.ii1_sqrt.transform_vector(mj_lambda1.angular); let ang_vel2 = self.ii2_sqrt.transform_vector(mj_lambda2.angular); @@ -237,10 +234,9 @@ impl RevoluteVelocityConstraint { mj_lambda2.angular -= self .ii2_sqrt .transform_vector(ang_impulse2 + self.r2.gcross(lin_impulse2)); + } - /* - * Motor. - */ + fn solve_motors(&mut self, mj_lambda1: &mut DeltaVel<Real>, mj_lambda2: &mut DeltaVel<Real>) { if self.motor_inv_lhs != 0.0 { let ang_vel1 = self.ii1_sqrt.transform_vector(mj_lambda1.angular); let ang_vel2 = self.ii2_sqrt.transform_vector(mj_lambda2.angular); @@ -258,6 +254,14 @@ impl RevoluteVelocityConstraint { mj_lambda1.angular += self.ii1_sqrt.transform_vector(self.motor_axis1 * impulse); mj_lambda2.angular -= self.ii2_sqrt.transform_vector(self.motor_axis2 * impulse); } + } + + pub fn solve(&mut self, mj_lambdas: &mut [DeltaVel<Real>]) { + let mut mj_lambda1 = mj_lambdas[self.mj_lambda1 as usize]; + let mut mj_lambda2 = mj_lambdas[self.mj_lambda2 as usize]; + + self.solve_dofs(&mut mj_lambda1, &mut mj_lambda2); + self.solve_motors(&mut mj_lambda1, &mut mj_lambda2); mj_lambdas[self.mj_lambda1 as usize] = mj_lambda1; mj_lambdas[self.mj_lambda2 as usize] = mj_lambda2; @@ -452,9 +456,7 @@ impl RevoluteVelocityGroundConstraint { mj_lambdas[self.mj_lambda2 as usize] = mj_lambda2; } - pub fn solve(&mut self, mj_lambdas: &mut [DeltaVel<Real>]) { - let mut mj_lambda2 = mj_lambdas[self.mj_lambda2 as usize]; - + fn solve_dofs(&mut self, mj_lambda2: &mut DeltaVel<Real>) { let ang_vel2 = self.ii2_sqrt.transform_vector(mj_lambda2.angular); let lin_dvel = mj_lambda2.linear + ang_vel2.gcross(self.r2); @@ -470,10 +472,8 @@ impl RevoluteVelocityGroundConstraint { mj_lambda2.angular -= self .ii2_sqrt .transform_vector(ang_impulse + self.r2.gcross(lin_impulse)); - - /* - * Motor. - */ + } + fn solve_motors(&mut self, mj_lambda2: &mut DeltaVel<Real>) { if self.motor_inv_lhs != 0.0 { let ang_vel2 = self.ii2_sqrt.transform_vector(mj_lambda2.angular); let ang_dvel = ang_vel2.dot(&self.motor_axis2); @@ -489,6 +489,13 @@ impl RevoluteVelocityGroundConstraint { mj_lambda2.angular -= self.ii2_sqrt.transform_vector(self.motor_axis2 * impulse); } + } + + pub fn solve(&mut self, mj_lambdas: &mut [DeltaVel<Real>]) { + let mut mj_lambda2 = mj_lambdas[self.mj_lambda2 as usize]; + + self.solve_dofs(&mut mj_lambda2); + self.solve_motors(&mut mj_lambda2); mj_lambdas[self.mj_lambda2 as usize] = mj_lambda2; } |
