parry3d/query/distance/
distance_ball_ball.rs

1use crate::math::{Point, Real};
2use crate::shape::Ball;
3use na::{self, ComplexField};
4
5/// Distance between balls.
6#[inline]
7pub fn distance_ball_ball(b1: &Ball, center2: &Point<Real>, b2: &Ball) -> Real {
8    let r1 = b1.radius;
9    let r2 = b2.radius;
10    let distance_squared = center2.coords.norm_squared();
11    let sum_radius = r1 + r2;
12
13    if distance_squared <= sum_radius * sum_radius {
14        0.0
15    } else {
16        ComplexField::sqrt(distance_squared) - sum_radius
17    }
18}