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

C++로 곡선 위의 한 점에서 접선 방정식 구하기

문제 개요

곡선 y = x(A − x)가 주어졌을 때, 이 곡선 위의 특정 점 (x, y)에서의 접선 방정식을 구하는 것이 목표입니다. 여기서 A는 정수이며, 좌표 x와 y 역시 모두 정수입니다.

풀이 접근

1단계: 점이 곡선 위에 있는지 확인

접선은 곡선 위의 점에서만 정의되므로, 먼저 주어진 점 (x, y)가 곡선의 방정식 y = Ax − x²를 만족하는지 검사해야 합니다. 만족하지 않는다면 해당 점에서의 접선은 존재하지 않습니다.

2단계: 미분으로 기울기 구하기

곡선 y = x(A − x)를 x에 대해 미분하면 다음과 같습니다.

dy/dx = A − 2x

이 값이 바로 점 (x, y)에서의 접선의 기울기(m)입니다.

3단계: 점-기울기 공식 적용

점 (x, y)와 기울기 m을 알고 있으므로 점-기울기 공식으로 접선의 방정식을 세울 수 있습니다.

Y − y = m × (X − x)

이를 기울기-절편 형태로 정리하면 Y = mX + (y − mx)이므로, 상수항 c = y − mx만 계산하면 됩니다.

C++ 구현

#include <iostream>
using namespace std;

// 곡선 y = x(A - x) 위의 점 (x, y)에서의 접선 방정식을 출력하는 함수
void getTangent(int A, int x, int y) {
    // 1. 주어진 점이 곡선 위에 있는지 확인
    if (y != A * x - x * x) {
        cout << "해당 점은 곡선 위에 존재하지 않습니다." << endl;
        return;
    }

    // 2. 미분값(A - 2x)으로 기울기 계산
    int m = A - 2 * x;

    // 3. y절편 계산: c = y - m * x
    int c = y - m * x;

    cout << "y = ";
    if (m > 0)
        cout << m << "x";
    else if (m < 0)
        cout << "-" << -m << "x";

    if (c > 0)
        cout << " + " << c;
    else if (c < 0)
        cout << " - " << -c;
    cout << endl;
}

int main() {
    int A = 2, x = 2, y = 0;
    cout << "접선의 방정식: ";
    getTangent(A, x, y);
    return 0;
}

실행 결과

접선의 방정식: y = -2x + 4

코드 설명

  • 곡선 위 점 검증: y ≠ Ax − x²이면 함수가 즉시 안내 메시지를 출력하고 종료합니다. 원래 예제에서는 이 경우 아무런 출력이 없었지만, 사용자에게 명확한 피드백을 제공하도록 개선했습니다.
  • 기울기 계산: 미분 결과인 A − 2x를 그대로 코드로 옮겨 접선의 기울기를 구합니다.
  • 부호 처리: 기울기와 절편의 부호에 따라 +, − 기호를 적절히 붙여 수학적으로 올바른 방정식 형태를 출력합니다.

복잡도 분석

이 풀이는 단순한 산술 연산만 수행하므로 시간 복잡도는 O(1), 추가 메모리 사용량 또한 O(1)입니다.