private static float pointIntersectsCircleOuterDetection(
         float pointX, float pointY, float speedX, float speedY, float radius,
         float outerCenterX, float outerCenterY, float outerRadius) {
      
      // Rearrange the parameters to form the quadratic equation
      double offsetPointX = pointX - outerCenterX;
      double offsetPointY = pointY - outerCenterY;
      double effectiveRadius = outerRadius - radius;
      double sqSpeedX = speedX * speedX;
      double sqSpeedY = speedY * speedY;
      double sqEffectiveRadius = effectiveRadius * effectiveRadius;
      double sqOffsetPointX = offsetPointX * offsetPointX;
      double sqOffsetPointY = offsetPointY * offsetPointY;
      
      double termA = sqSpeedX + sqSpeedY;
      double termB = 2.0 * (speedX * offsetPointX + speedY * offsetPointY);
      double termC = sqOffsetPointX + sqOffsetPointY - sqEffectiveRadius;
      double b2minus4ac = termB * termB - 4.0 * termA * termC;  
      if (b2minus4ac < 0) {
         return Float.MAX_VALUE;
      }
      double rootB2minus4ac = Math.sqrt(b2minus4ac);
      double sol1 = (-termB + rootB2minus4ac) / (2.0 * termA);
      double sol2 = (-termB - rootB2minus4ac) / (2.0 * termA);
      // return the smaller positive solution
      if (sol1 > 0 && sol2 > 0) {
         return (float)Math.min(sol1, sol2);
      } else if (sol1 > 0) {
         return (float)sol1;
      } else if (sol2 > 0) {
         return (float)sol2;
      } else {
         return Float.MAX_VALUE;
      }
   }