이 문제에서는 한 선분의 시작점 A와 끝점 B가 주어지며, C++을 이용해 이 선분의 중점(midpoint)을 구하는 프로그램을 작성하는 것이 목표입니다.
문제 설명
시작점과 끝점이 각각 A(x1, y1), B(x2, y2)로 주어진 선분이 있고, 우리는 이 선분의 중점을 찾아야 합니다.
예제로 문제 이해하기
입력:
a(x1, y1) = (4, -5) b(x2, y2) = (-2, 6)
출력:
(1, 0.5)
설명:
x좌표의 중점 = (x1 + x2) / 2 = (4 + (-2)) / 2 = 1 y좌표의 중점 = (y1 + y2) / 2 = (-5 + 6) / 2 = 0.5
해결 접근 방법
이 문제를 해결하는 가장 간단한 방법은 기하학에서 사용되는 선분의 중점 공식을 활용하는 것입니다. 공식은 다음과 같습니다.
중점 = ( ((x1 + x2) / 2), ((y1 + y2) / 2) )
즉, 두 끝점의 x좌표끼리 평균을 내고, y좌표끼리 평균을 내면 그 값이 곧 선분의 중점 좌표가 됩니다. 시간 복잡도는 단순 연산만 수행하므로 O(1)로 매우 효율적입니다.
C++ 구현 예제
다음은 위 해결 방법의 동작을 보여주는 프로그램입니다.
#include<iostream>
using namespace std;
int main() {
float point[2][2] = {{-4, 5}, {-2, 6}};
float midX = (float)((point[0][0] + point[1][0]) / 2);
float midY = (float)((point[0][1] + point[1][1]) / 2);
cout << "선분의 중점은 (" << midX << " , " << midY << ")";
return 0;
}실행 결과:
선분의 중점은 (-3 , 5.5)
코드 설명
- 2×2 크기의 배열
point에 두 끝점의 x, y 좌표를 저장합니다. midX와midY에는 각각 x좌표의 평균과 y좌표의 평균을 계산하여 저장합니다.- 정수 나눗셈으로 인한 소수점 손실을 방지하기 위해 결과를
float형으로 캐스팅합니다. - 마지막으로 계산된 중점 좌표를 화면에 출력합니다.
이처럼 중점 공식만 알면 두 점이 음수 좌표를 포함하더라도 손쉽게 선분의 중점을 구할 수 있습니다.