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

C++로 두 점을 지나는 직선의 방정식 구하는 프로그램

문제 개요

좌표평면 위에 있는 두 점 A와 B의 좌표가 주어졌을 때, 이 두 점을 지나는 직선의 방정식을 구하는 프로그램을 C++로 작성하는 것이 이번 문제의 목표입니다.

문제 설명

직선을 찾기 위해서는 직선의 방정식을 활용하고, 주어진 두 점의 좌표를 대입하여 계수를 구해야 합니다.

예시를 통해 문제를 이해해 보겠습니다

  • 입력: A = (3, 3), B = (6, 1)
  • 출력: 2x + 3y = 15

풀이 접근 방법

직선의 방정식을 구하기 위해 다음과 같은 일반형 방정식을 사용합니다.

ax + by = c

이 방정식은 두 점 A(x1, y1)와 B(x2, y2) 모두를 만족해야 하므로, 각각의 점을 대입하면 다음 두 식을 얻을 수 있습니다.

ax1 + by1 = c
ax2 + by2 = c

여기서 c는 두 식에 공통으로 포함되어 있으므로, 두 식을 서로 같다고 놓으면 다음과 같이 정리됩니다.

ax1 + by1 = ax2 + by2
⇒ a(x1 − x2) = b(y2 − y1)

이 관계식으로부터 각 계수를 다음과 같이 구할 수 있습니다.

a = (y2 − y1)
b = (x1 − x2)

마지막으로 c는 첫 번째 점의 좌표를 대입한 식을 통해 구합니다.

c = a·x1 + b·y1

정리하면, 두 점을 지나는 직선의 방정식 계수는 다음과 같습니다.

a = (y2 − y1)
b = (x1 − x2)
c = a·x1 + b·y1

참고로 위 예시 입력 A = (3, 3), B = (6, 1)에 공식을 적용하면 a = −2, b = −3, c = −15가 되고, 양변에 −1을 곱해 정리하면 출력 결과인 2x + 3y = 15와 일치함을 확인할 수 있습니다.

예제 코드

#include <iostream>
using namespace std;

void findLine(int points[2][2]) {
    int a = points[1][1] - points[0][1];
    int b = points[0][0] - points[1][0];
    int c = a * points[0][0] + b * points[0][1];
    cout << "(" << a << "x) + (" << b << "y) = (" << c << ")";
}

int main() {
    int points[2][2] = {{5, 9}, {1, 4}};
    cout << "The equation of line is ";
    findLine(points);
    return 0;
}

실행 결과

The equation of line is (-5x) + (4y) = (11)

코드 설명

위 코드는 2×2 배열에 저장된 두 점의 좌표를 findLine 함수에 전달합니다. 함수 내부에서 앞서 유도한 공식대로 a, b, c를 차례로 계산한 뒤, 직선의 방정식 형태로 출력합니다.

예제에서 사용된 두 점은 (5, 9)와 (1, 4)입니다. 공식에 대입하면 a = 4 − 9 = −5, b = 5 − 1 = 4, c = (−5)×5 + 4×9 = 11이 되어, 실행 결과인 −5x + 4y = 11이 도출됩니다.

이 알고리즘은 단순한 사칙연산만 수행하므로 시간 복잡도는 O(1)이며, 어떤 두 점이 주어지더라도 상수 시간 안에 직선의 방정식을 구할 수 있습니다.