Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 원을 기준으로 점이 속한 사분면 판별하기

원의 중심 좌표와 반지름이 주어져 있고, 또 다른 한 점 (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() 함수는 다음 순서로 동작합니다.

  1. 먼저 점이 원의 중심 (h, k)과 정확히 일치하는지 확인하고, 일치한다면 0을 반환합니다.
  2. (x − h)2 + (y − k)2 값을 계산한 뒤 반지름의 제곱 r2과 비교하여, 값이 더 크면 점이 원 밖에 있는 것이므로 −1을 반환합니다.
  3. 점이 원 내부에 있다면, x 좌표를 h와 비교하고 y 좌표를 k와 비교하여 제1사분면부터 제4사분면까지 순서대로 판별합니다.

위 예제에서 원의 중심은 (0, 3), 반지름은 2이며, 점 (1, 4)는 원 내부에 있고 x > h, y >= k 조건을 만족하므로 제1사분면(1 Quadrant)이 출력됩니다.