ncollide3d/query/distance/
distance_ball_ball.rs

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