philosyang.com

1401. Circle and Rectangle Overlapping | 1709

Merry Christmas!

 1class Solution:
 2    def checkOverlap(
 3        self,
 4        radius: int,
 5        xCenter: int,
 6        yCenter: int,
 7        x1: int,
 8        y1: int,
 9        x2: int,
10        y2: int,
11    ) -> bool:
12        # intuition:
13        # start from circle center
14        # find dist to 4 edges (incl. extensions) of the rectangle
15        # true if (point not on extension) and (dist <= radius)
16        # also true if circle center within rectangle
17        # also true if 4 rectangle corners to circle center dist <= radius
18
19        square_left = x1
20        square_right = x2
21        square_bottom = y1
22        square_top = y2
23
24        circle_x = xCenter
25        circle_y = yCenter
26
27        def euclidean_distance(ex0, ey0, ex1, ey1) -> float:
28            return ((ex0 - ex1) ** 2 + (ey0 - ey1) ** 2) ** 0.5
29
30        # left
31        if abs(circle_x - square_left) <= radius and y1 <= circle_y <= y2:
32            return True
33        # right
34        if abs(circle_x - square_right) <= radius and y1 <= circle_y <= y2:
35            return True
36        # bottom
37        if abs(circle_y - square_bottom) <= radius and x1 <= circle_x <= x2:
38            return True
39        # top
40        if abs(circle_y - square_top) <= radius and x1 <= circle_x <= x2:
41            return True
42        # within
43        if x1 <= circle_x <= x2 and y1 <= circle_y <= y2:
44            return True
45
46        # bottom-left corner
47        if euclidean_distance(circle_x, circle_y, x1, y1) <= radius:
48            return True
49        # bottom-right corner
50        if euclidean_distance(circle_x, circle_y, x2, y1) <= radius:
51            return True
52        # top-left corner
53        if euclidean_distance(circle_x, circle_y, x1, y2) <= radius:
54            return True
55        # top-right corner
56        if euclidean_distance(circle_x, circle_y, x2, y2) <= radius:
57            return True
58
59        return False

https://leetcode.com/problems/circle-and-rectangle-overlapping/solutions/7439554/geometric-o1-edges-corners-and-containme-2nbn

#Geometry #Python