원의 중심 좌표와 원주 위의 한 점이 주어졌을 때, 지름의 반대쪽 끝에 해당하는 점의 좌표를 구하는 문제를 생각해 봅시다.
원의 중심을 (p, q), 주어진 점을 (a, b), 그리고 우리가 구해야 할 점을 (x, y)라고 하겠습니다.
핵심 아이디어
지름은 중심점을 기준으로 대칭이므로, 중심은 지름의 정중앙(중점)에 위치합니다. 따라서 다음과 같은 관계식을 세울 수 있습니다.
(p, q) = ((a + x) / 2, (b + y) / 2)
이 식을 (x, y)에 대해 정리하면 다음과 같습니다.
x = 2p − a
y = 2q − b
즉, 각 좌표 성분에 대해 '중심 × 2 − 주어진 점'을 계산하면 반대쪽 끝 점을 바로 얻을 수 있습니다.
C++ 구현 예제
#include <iostream>
using namespace std;
int main() {
double p = 3, q = 4; // 원의 중심 (p, q)
double a = 5, b = 7; // 원주 위의 한 점 (a, b)
// 지름의 반대쪽 끝 점 계산
double x = 2 * p - a;
double y = 2 * q - b;
cout << "반대쪽 끝 점: (" << x << ", " << y << ")" << endl;
return 0;
}
실행 결과
반대쪽 끝 점: (1, 1)
동작 설명
위 예제에서 중심은 (3, 4), 주어진 점은 (5, 7)입니다.
- x = 2 × 3 − 5 = 1
- y = 2 × 4 − 7 = 1
따라서 지름의 반대쪽 끝 점은 (1, 1)이 됩니다. 실제로 (5, 7)과 (1, 1)의 중점을 계산해 보면 ((5+1)/2, (7+1)/2) = (3, 4)로 원의 중심과 일치하는 것을 확인할 수 있습니다.
이 방법은 시간 복잡도 O(1)로 단순한 산술 연산만 사용하기 때문에 매우 효율적이며, 실수형 좌표뿐 아니라 정수형 좌표에도 동일하게 적용할 수 있습니다.