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

C/C++로 포물선의 꼭짓점, 초점, 준선 구하는 프로그램 만들기

포물선이란 무엇인가?

평면 위의 한 점(중심점, 이른바 초점)으로부터 항상 같은 거리를 유지하면서 이루어진 곡선을 포물선(parabola)이라고 합니다. 포물선의 일반 방정식은 다음과 같습니다.

y = ax2 + bx + c

핵심 개념 정리

꼭짓점(Vertex)

포물선이 가장 날카롭게 방향을 전환하는 지점의 좌표를 의미합니다.

초점(Focus)

포물선 위의 모든 점으로부터 등거리에 있는 고정점입니다.

준선(Directrix)

포물선을 정의하는 기준 직선으로, 포물선 위의 모든 점은 초점까지의 거리와 준선까지의 거리가 서로 같다는 성질을 가집니다.

문제 정의

이번 글에서는 포물선의 계수 a, b, c가 주어졌을 때 꼭짓점, 초점, 준선(y-Directrix)을 구하는 프로그램을 작성해 보겠습니다. 별도의 알고리즘이 필요하지 않고, 검증된 수학 공식을 그대로 코드로 옮기면 됩니다.

입력:
a = 10,
b = 5,
c = 4

출력:
The vertex: (-0.25, 3.375)
The Focus: (-0.25, 3.4)
y-Directrix: -1036

풀이 접근 방식

계수 a, b, c의 값이 주어지면 아래 공식을 사용하여 세 값을 모두 계산할 수 있습니다.

꼭짓점 = { (-b / 2a), (4ac − b2) / 4a }

초점 = { (-b / 2a), (4ac − b2 + 1) / 4a }

준선(Directrix) = c − (b2 + 1) × 4a

꼭짓점과 초점의 x좌표는 동일하게 -b/2a이며, 초점의 y좌표만 꼭짓점보다 1/4a만큼 큽니다.

C++ 구현 예제

#include <iostream>
using namespace std;
int main() {
    float a = 10, b = 5, c = 4;
    cout << "The vertex: (" << (-b / (2 * a)) << ", " << (((4 * a * c) - (b * b)) / (4 * a)) << ")\n";
    cout << "The Focus: (" << (-b / (2 * a)) << ", " << (((4 * a * c) - (b * b) + 1) / (4 * a)) << ")\n";
    cout << "y-Directrix:" << c - ((b * b) + 1) * 4 * a;
}

코드 설명 및 결과 분석

위 코드는 앞서 소개한 공식을 그대로 구현한 것입니다. 입력값 a = 10, b = 5, c = 4를 대입하면 다음과 같이 계산됩니다.

  • x좌표: -b / 2a = -5 / 20 = -0.25
  • 꼭짓점 y좌표: (4 × 10 × 4 − 25) / 40 = 135 / 40 = 3.375
  • 초점 y좌표: (135 + 1) / 40 = 3.4
  • 준선: 4 − (25 + 1) × 40 = 4 − 1040 = -1036

따라서 프로그램을 실행하면 꼭짓점 (-0.25, 3.375), 초점 (-0.25, 3.4), 준선 -1036이 순서대로 출력됩니다. 시간 복잡도는 단순한 산술 연산만 수행하므로 O(1)이며, 어떤 계수가 입력되더라도 상수 시간 안에 결과를 얻을 수 있습니다.