원의 중심 좌표와 반지름이 주어져 있고, 또 다른 한 점 (x, y)가 원의 중심을 기준으로 어느 사분면에 위치하는지 구하는 문제입니다. 점이 원 내부에 존재하면 해당 사분면을 출력하고, 원 바깥에 있다면 오류 메시지를 출력합니다.
원의 중심을 (h, k), 점의 좌표를 (x, y)라고 할 때, 원의 방정식은 다음과 같습니다.
(x − h)2 + (y − k)2 = r2
점의 위치는 아래 조건들을 통해 판단할 수 있습니다.
- (x − h)2 + (y − k)2 > r2 이면, 점은 원의 외부에 있습니다.
- (x − h)2 + (y − k)2 = r2 이면, 점은 원 위에 있습니다.
- (x − h)2 + (y − k)2 < r2 이면, 점은 원의 내부에 있습니다.
예제 코드
#include<iostream>
#include<cmath>
using namespace std;
int getQuadrant(int h, int k, int rad, int x, int y) {
// 점이 원의 중심과 일치하면 0 반환
if (x == h && y == k)
return 0;
int val = pow((x - h), 2) + pow((y - k), 2);
// 원의 외부에 있으면 -1 반환
if (val > pow(rad, 2))
return -1;
// 사분면 판별
if (x > h && y >= k)
return 1;
if (x <= h && y > k)
return 2;
if (x < h && y <= k)
return 3;
if (x >= h && y < k)
return 4;
}
int main() {
int h = 0, k = 3;
int rad = 2;
int x = 1, y = 4;
int ans = getQuadrant(h, k, rad, x, y);
if (ans == -1)
cout << "Point is Outside of the circle" << endl;
else if (ans == 0)
cout << "Present at the center" << endl;
else
cout << ans << " Quadrant" << endl;
}실행 결과
1 Quadrant
코드 동작 원리
getQuadrant() 함수는 다음 순서로 동작합니다.
- 먼저 점이 원의 중심 (h, k)과 정확히 일치하는지 확인하고, 일치한다면 0을 반환합니다.
- (x − h)2 + (y − k)2 값을 계산한 뒤 반지름의 제곱 r2과 비교하여, 값이 더 크면 점이 원 밖에 있는 것이므로 −1을 반환합니다.
- 점이 원 내부에 있다면, x 좌표를 h와 비교하고 y 좌표를 k와 비교하여 제1사분면부터 제4사분면까지 순서대로 판별합니다.
위 예제에서 원의 중심은 (0, 3), 반지름은 2이며, 점 (1, 4)는 원 내부에 있고 x > h, y >= k 조건을 만족하므로 제1사분면(1 Quadrant)이 출력됩니다.