원의 중심 좌표와 반지름이 주어져 있고, 별도의 한 점의 좌표가 주어졌다고 가정해 보겠습니다. 이때 해당 점이 원의 내부에 속하는지 여부를 판별하는 것이 이 글의 목표입니다.
문제 해결 접근법
이 문제는 유클리드 거리 공식을 이용하면 간단하게 해결할 수 있습니다. 먼저 주어진 점으로부터 원의 중심까지의 거리를 계산합니다. 두 점 사이의 거리는 다음과 같은 공식으로 구할 수 있습니다.
거리 = √((x − cx)² + (y − cy)²)
여기서 (cx, cy)는 원의 중심 좌표, (x, y)는 주어진 점의 좌표입니다. 계산된 거리가 반지름 r보다 작거나 같으면 그 점은 원 안(또는 경계선 위)에 있는 것이고, 거리가 반지름보다 크다면 원 밖에 있습니다.
참고로 실제 코드 구현 시에는 sqrt() 함수를 호출하지 않고, 거리의 제곱 값과 반지름의 제곱 값을 직접 비교하는 방식을 사용합니다. 이렇게 하면 부동소수점 연산 없이 정수 연산만으로 판별할 수 있어 성능 면에서도 유리합니다.
예제 코드
#include <iostream>
#include <cmath>
using namespace std;
bool isInsideCircle(int cx, int cy, int r, int x, int y) {
int dist = (x - cx) * (x - cx) + (y - cy) * (y - cy);
if ( dist <= r * r)
return true;
else
return false;
}
int main() {
int x = 4, y = 4, cx = 1, cy = 1, rad = 6;
if(isInsideCircle(cx, cy, rad, x, y)){
cout <<"Inside Circle";
} else {
cout <<"Outside Circle";
}
}코드 설명
isInsideCircle 함수는 원의 중심 좌표(cx, cy), 반지름(r), 그리고 판별할 점의 좌표(x, y)를 매개변수로 받습니다. 함수 내부에서는 점과 중심 사이의 거리 제곱 값을 계산한 뒤, 이를 반지름의 제곱과 비교하여 점이 원 내부에 있으면 true, 외부에 있으면 false를 반환합니다.
실행 결과
Inside Circle
위 예제에서 점 (4, 4)는 중심 (1, 1)로부터 약 4.24만큼 떨어져 있으며, 이는 반지름 6보다 작으므로 "Inside Circle"이 출력됩니다.