aboutsummaryrefslogtreecommitdiff
path: root/src/geometry
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2020-11-19 11:02:35 +0100
committerGitHub <noreply@github.com>2020-11-19 11:02:35 +0100
commit7e560d43f20447f0d70f45c10f39410e32902bb4 (patch)
tree52a740208b6ee4b1e8c8102cf90982c14d8c0af1 /src/geometry
parent7af7db6183f39e7c5f4d1e0c0cbf21331d354118 (diff)
parent17614116da30b2dbe80d33e1a32c76f93c485fe9 (diff)
downloadrapier-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.rs9
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;