Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Geometry
- class Solution:
- def checkOverlap(
- self,
- radius: int,
- x_center: int,
- y_center: int,
- x1: int,
- y1: int,
- x2: int,
- y2: int,
- ) -> bool:
- if x1 <= x_center <= x2 and y1 <= y_center <= y2:
- return True
- def notOverlaps(start1, end1, start2, end2):
- return end1 < start2 or end2 < start1
- def overlaps(start1, end1, start2, end2):
- return not notOverlaps(start1, end1, start2, end2)
- def shift(interval, delta):
- if interval is None:
- return None
- (start, end) = interval
- return (start + delta, end + delta)
- def circleLine(r, d):
- if d < 0 or r < d:
- return None
- w = (r ** 2 - d ** 2) ** 0.5
- return [-w, w]
- segments = [
- (x1, x2),
- (x1, x2),
- (y1, y2),
- (y1, y2),
- ]
- circleSegments = [
- shift(circleLine(radius, y1 - y_center), x_center),
- shift(circleLine(radius, y_center - y2), x_center),
- shift(circleLine(radius, x1 - x_center), y_center),
- shift(circleLine(radius, x_center - x2), y_center),
- ]
- for int1, int2 in zip(segments, circleSegments):
- if int2 is None:
- continue
- (start1, end1) = int1
- (start2, end2) = int2
- if overlaps(start1, end1, start2, end2):
- return True
- return False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement