원점을 중심으로 하는 두 개의 동심원이 있다고 가정해 보겠습니다. 두 원의 반지름은 각각 r과 R로 주어지며, r은 바깥쪽 원, R은 안쪽 원의 반지름입니다(r > R). 여기에 세 번째 원이 하나 더 존재하는데, 이 원의 반지름 r1과 중심 좌표 (x, y)가 주어졌을 때 해당 원이 두 원 사이의 고리(환형 영역) 안에 완전히 들어가는지 판별하는 것이 이 글의 목표입니다.

접근 방법: 피타고라스 정리 활용
이 문제는 피타고라스 정리를 사용하면 간단하게 해결할 수 있습니다. 먼저 세 번째 원의 중심과 원점 사이의 거리를 다음과 같이 계산합니다.
distance = √(x² + y²)
그런 다음 아래 두 조건이 동시에 성립하는지 확인합니다.
- distance + r1 ≤ r : 세 번째 원의 가장 바깥쪽 지점이 바깥 원을 벗어나지 않아야 합니다.
- distance − r1 ≥ R : 세 번째 원의 가장 안쪽 지점이 안쪽 원에 닿지 않아야 합니다.
두 조건이 모두 참이라면 해당 원은 고리 내부에 완전히 포함된 것입니다.
C++ 구현 예제
#include <iostream>
#include <cmath>
using namespace std;
bool isInside(int r, int R, int r1, int x, int y) {
double dis = sqrt(x*x + y*y);
return (dis - r1 >= R && dis + r1 <= r);
}
int main() {
int r = 8, R = 4, r1 = 2, x = 6, y = 0;
if (isInside(r, R, r1, x, y))
cout << "원은 고리 내부에 포함됩니다." << endl;
else
cout << "원은 고리 내부에 포함되지 않습니다." << endl;
}
동작 원리 살펴보기
예제에서 세 번째 원의 중심은 (6, 0)이고 반지름은 2입니다. 원점까지의 거리는 √(6² + 0²) = 6이 됩니다. 이제 두 조건을 차례로 확인해 보겠습니다.
- 6 + 2 = 8 ≤ 8 → 만족
- 6 − 2 = 4 ≥ 4 → 만족
두 조건이 모두 충족되므로 이 원은 고리 내부에 완전히 들어간다고 판정됩니다. 참고로 거리를 저장할 때 int 대신 double을 사용하면 제곱근 계산 시 소수점 잘림 오류를 방지할 수 있어 더 안전합니다.
실행 결과
원은 고리 내부에 포함됩니다.