(반지름, 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