diff options
| author | Crozet Sébastien <developer@crozet.re> | 2021-02-19 17:32:09 +0100 |
|---|---|---|
| committer | Crozet Sébastien <developer@crozet.re> | 2021-02-19 17:32:09 +0100 |
| commit | dc8ccc0c30e75aea8f144dbfad16be088d4d4ea2 (patch) | |
| tree | bdf50466616f449570713ca61f419aa04807d4b1 /src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs | |
| parent | e9f17f32e8dda4b97d2eb7b2118b7373d0c554d0 (diff) | |
| download | rapier-dc8ccc0c30e75aea8f144dbfad16be088d4d4ea2.tar.gz rapier-dc8ccc0c30e75aea8f144dbfad16be088d4d4ea2.tar.bz2 rapier-dc8ccc0c30e75aea8f144dbfad16be088d4d4ea2.zip | |
Make revolute joint actuation work properly even when SIMD is enabled.
Diffstat (limited to 'src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs')
| -rw-r--r-- | src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs b/src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs index 1219c39..10a042c 100644 --- a/src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs +++ b/src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs @@ -56,24 +56,25 @@ impl RevoluteVelocityConstraint { rb1.position * joint.basis1[0], rb1.position * joint.basis1[1], ]); - let basis_filter1 = basis1 * basis1.transpose(); - let basis2 = Matrix3x2::from_columns(&[ + let basis_projection1 = basis1 * basis1.transpose(); + + let basis_projection_half2 = Matrix3x2::from_columns(&[ rb2.position * joint.basis2[0], rb2.position * joint.basis2[1], ]); - let basis_filter2 = basis2 * basis2.transpose(); - let basis2 = basis_filter2 * basis1; + let basis_projection2 = basis_projection_half2 * basis_projection_half2.transpose(); + let basis2 = basis_projection2 * basis1; let im1 = rb1.effective_inv_mass; let im2 = rb2.effective_inv_mass; let ii1 = rb1.effective_world_inv_inertia_sqrt.squared(); let r1 = anchor1 - rb1.world_com; - let r1_mat = basis_filter1 * r1.gcross_matrix(); + let r1_mat = basis_projection1 * r1.gcross_matrix(); let ii2 = rb2.effective_world_inv_inertia_sqrt.squared(); let r2 = anchor2 - rb2.world_com; - let r2_mat = basis_filter2 * r2.gcross_matrix(); + let r2_mat = basis_projection2 * r2.gcross_matrix(); let mut lhs = Matrix5::zeros(); let lhs00 = @@ -318,15 +319,15 @@ impl RevoluteVelocityGroundConstraint { anchor1 = rb1.position * joint.local_anchor2; anchor2 = rb2.position * joint.local_anchor1; basis2 = Matrix3x2::from_columns(&[ - rb2.position * joint.basis2[0], - rb2.position * joint.basis2[1], + rb2.position * joint.basis1[0], + rb2.position * joint.basis1[1], ]); } else { anchor1 = rb1.position * joint.local_anchor1; anchor2 = rb2.position * joint.local_anchor2; basis2 = Matrix3x2::from_columns(&[ - rb2.position * joint.basis1[0], - rb2.position * joint.basis1[1], + rb2.position * joint.basis2[0], + rb2.position * joint.basis2[1], ]); }; |
