Given a circle represented as (radius, x_center, y_center) and an axis-aligned rectangle represented as (x1, y1, x2, y2), where (x1, y1) are the coordinates of the bottom-left corner, and (x2, y2) are the coordinates of the top-right corner of the rectangle.
Return True if the circle and rectangle are overlapped otherwise return False.
In other words, check if there are any point (xi, yi) such that belongs to the circle and the rectangle at the same time.
Example 1:
Input: radius = 1, x_center = 0, y_center = 0, x1 = 1, y1 = -1, x2 = 3, y2 = 1
Output: true
Explanation: Circle and rectangle share the point (1,0)
classSolution { /** * There are three cases in total: * Case1: x1 <= x_center <= x2 (the two = cannot exist at the same time) * Case2: x_center <= x1 < x2 * Case3: x1 < x2 <= x_center * The clamp function takes x_center, x1 and x2 as inputs, and then * returns the closet point to x_center within the range of [x1, x2] . * For the three cases, the clamp function returns: * Case1: x_center * Case2: x1 * Case3: x2 */publicbooleancheckOverlap(int radius,int x_center,int y_center,int x1,int y1,int x2,int y2) {// Find the closest point to the circle within the rectangleint closestX =clamp(x_center, x1, x2);int closestY =clamp(y_center, y1, y2);// Calculate the distance between the circle's center and this closest pointint distanceX = x_center - closestX;int distanceY = y_center - closestY;// If the distance is less than the circle's radius, an intersection occursint distanceSquared = (distanceX * distanceX) + (distanceY * distanceY);return distanceSquared <= (radius * radius); }publicintclamp(int val,int min,int max) {returnMath.max(min,Math.min(max, val)); }}