(반지름, xc, yc)로 표시되는 원이 있다고 가정합니다. 여기서 (xc, yc)는 원의 중심 좌표입니다. 또한 (x1, y1, x2, y2)로 표시되는 축 정렬 직사각형이 있습니다. 여기서 (x1, y1)은 왼쪽 하단 모서리의 좌표이고 (x2, y2)는 오른쪽 상단의 좌표입니다. 직사각형의 모서리. 원과 직사각형이 겹치는지 확인해야 합니다.
따라서 입력이 다음과 같으면
그러면 출력이 true가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
eval() 함수를 정의하면, b, c,
가 필요합니다. -
b의 최대값과 및 c의 최소값을 반환
-
기본 방법에서 다음을 수행하십시오 -
-
cdx :=eval(cx, 왼쪽, 오른쪽), cdy :=eval(cy, 아래쪽, 위쪽)
-
rwid :=오른쪽 - 왼쪽, rh :=위쪽 - 아래쪽
-
dx :=cx - cdx, dy :=cy - cdy
-
disSq :=(dx * dx) + (dy * dy)
-
제곱 반경 :=(r * r)
-
disSq <=sqrRadius이면 true를 반환하고, 그렇지 않으면 false
를 반환합니다.
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; class Solution { public: int eval(int a, int b, int c){ return max(b, min(a, c)); } bool checkOverlap(int r, int cx, int cy, int left, int bottom, int right, int top){ double cdx = eval(cx, left, right); double cdy = eval(cy, bottom, top); double rwid = right - left; double rh = top - bottom; double dx = cx - cdx; double dy = cy - cdy; double disSq = (dx * dx) + (dy * dy); double sqrRadius = (r * r); return (disSq <= sqrRadius); } }; main(){ Solution ob; cout << (ob.checkOverlap(1, 0, 0, 1, -1, 3, 1)); }
입력
1, 0, 0, 1, -1, 3, 1
출력
1