diff options
| author | Sébastien Crozet <developer@crozet.re> | 2020-11-19 11:02:35 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-19 11:02:35 +0100 |
| commit | 7e560d43f20447f0d70f45c10f39410e32902bb4 (patch) | |
| tree | 52a740208b6ee4b1e8c8102cf90982c14d8c0af1 /src/geometry | |
| parent | 7af7db6183f39e7c5f4d1e0c0cbf21331d354118 (diff) | |
| parent | 17614116da30b2dbe80d33e1a32c76f93c485fe9 (diff) | |
| download | rapier-7e560d43f20447f0d70f45c10f39410e32902bb4.tar.gz rapier-7e560d43f20447f0d70f45c10f39410e32902bb4.tar.bz2 rapier-7e560d43f20447f0d70f45c10f39410e32902bb4.zip | |
Merge pull request #60 from dimforge/ball_ball_collision_bug
Fix NaN when two balls are in contact and their centers coincide.
Diffstat (limited to 'src/geometry')
| -rw-r--r-- | src/geometry/contact_generator/ball_ball_contact_generator.rs | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/geometry/contact_generator/ball_ball_contact_generator.rs b/src/geometry/contact_generator/ball_ball_contact_generator.rs index 4889aaf..96ac235 100644 --- a/src/geometry/contact_generator/ball_ball_contact_generator.rs +++ b/src/geometry/contact_generator/ball_ball_contact_generator.rs @@ -1,6 +1,6 @@ use crate::geometry::contact_generator::PrimitiveContactGenerationContext; use crate::geometry::{Contact, KinematicsCategory}; -use crate::math::Point; +use crate::math::{Point, Vector}; #[cfg(feature = "simd-is-enabled")] use { crate::geometry::contact_generator::PrimitiveContactGenerationContextSimd, @@ -72,7 +72,12 @@ pub fn generate_contacts_ball_ball(ctxt: &mut PrimitiveContactGenerationContext) let dist = center_dist - radius_a - radius_b; if dist < ctxt.prediction_distance { - let local_n1 = dcenter / center_dist; + let local_n1 = if center_dist != 0.0 { + dcenter / center_dist + } else { + Vector::y() + }; + let local_n2 = pos_ba.inverse_transform_vector(&-local_n1); let local_p1 = local_n1 * radius_a; let local_p2 = local_n2 * radius_b; |
