/// <summary> /// Discrete Circle vs Circle test. Very fast. Generates contact info. /// NOTE: check distance for collisions. If negative then a collision has occurred. /// This is done to remove all branches from this test and leave it to the user to decide when to branch. /// </summary> public static void CircleCircleTest(JVector centerA, float radiusA, JVector centerB, float radiusB, out JVector pointA, out JVector pointB, out JVector normal, out float distance) { // ||A-B|| - (r1+r2) < 0 float d = JVector.DistanceSquared(centerA, centerB); float r = (radiusA + radiusB); r *= r; distance = d - r; normal = (centerA - centerB) / d; normal.Normalize(); // calculate closest 2 points pointA = JVector.Negate(normal) * radiusA + centerA; pointB = normal * radiusB + centerB; }