/// <summary> /// Determines the closest approach distance between two orbiting bodies /// over the specified time interval. /// </summary> /// <returns>The approach distance.</returns> /// <param name="collider1">Collider1.</param> /// <param name="collider2">Collider2.</param> /// <param name="numSteps">Number steps.</param> /// <param name="interval">The time interval to check.</param> double ClosestApproachDistance(OrbitData collider1, OrbitData collider2, double interval, int numSteps = 30) { double minDistance = double.PositiveInfinity; OrbitData orbit1 = new OrbitData(collider1); OrbitData orbit2 = new OrbitData(collider2); double intervalStepSize = interval / numSteps; double time = 0.0; while (time <= interval) { orbit1.Step(intervalStepSize); orbit2.Step(intervalStepSize); double distance = (orbit1.Position - orbit2.Position).magnitude; if (distance < minDistance) { minDistance = distance; } time += intervalStepSize; } return(minDistance); }