05. 다섯 번째 수업: 데카르트 평면 위에 포물선을 코딩하다 (Parabola Equations)
우리는 바로 앞 장에서 우퍼 스피커처럼 $y$축이 위아래로 벌어지면서 $x$ 차축을 향해 오른쪽(혹은 왼쪽)으로 주둥이를 벌리는 가로형 포물선 방정식 $y^2 = 4px$ 를 발굴했습니다. 그렇다면 우리가 중학교 시절에 그토록 징그럽게 풀었던 아래로 볼록(혹은 위로 솟구치는) 한 세로형 컵 모양 종이컵 포물선(이차함수)은 이 로직 뼈대로 어떻게 작성될까요?
상식을 발휘해 보세요. $X$ 좌표와 $Y$ 좌표의 역할만 대각선 데칼코마니(마우스 드래그 $90$도 회전) 로 뒤집어 주면 됩니다!
1. 가로형 vs 세로형 포트폴리오 차이
- 오른쪽/왼쪽으로 아가리를 벌리는 식 (레이더 안테나형):
- 코드: $y^2 = 4px$
- 초점: $(p, 0)$ / 준선: $x = -p$
- (만약 $p$ 가 음수라면 입구 주둥이가 반대쪽인 왼쪽 지하실을 쳐다봅니다.)
- 위쪽/아래쪽으로 솟구치는 식 (분수대 포탄 궤도형):
- 코드: $x^2 = 4py$ (자리가 스왑됨!)
- 초점: $(0, p)$ / 준선: $y = -p$
- (만약 $p$ 가 양수면 하늘을 향해 만세 U자, 음수면 땅을 향해 엎어진 $\cap$ 캡 모양을 그립니다)
어? $x^2 = 4py$ 를 $y=$ 에 관하여 예쁘게 이항하면 무언가 소름 돋게 익숙한 모양이 떨어지지 않나요? \(y = \frac{1}{4p} x^2\) 바로 그렇습니다! 우리가 함수 단원에서 배웠던 $y = a x^2$ 의 이차함수 형태가 사실은 저 안에 “초점 거리 $p$” 를 억지로 짓눌러 욱여넣고 은폐하고 있었던 동일한 쌍둥이 포물선 모델이었습니다. (여기서 $a = \frac{1}{4p}$)
2. 평행 이동 (Transforming the Origin)
지금까지의 $y^2 = 4px$ 렌더링은 무조건 원점 $(0,0)$ 에 그 거대한 컵의 엉덩이 꼭짓점이 붙어있을 때를 가정한 디폴트(Default) 기초 렌더링 코드였습니다. 만약 이 포물선을 데카르트 평면 모니터 상에서 오른쪽으로 우측 $3$칸, 위로 $2$칸 들어 올려서 이동(Transform Translate) 복사 붙여넣기를 하고 싶다면 어떻게 해야 할까요?
마치 폴더 경로를 바꾸듯, 프로그래밍 변수 자체에 강제로 마이너스 뺄셈 족쇄를 걸어버리면 됩니다.
꼭짓점을 원점 $(0,0)$ 에서 $\rightarrow (m, n)$ 좌표로 이동하고 싶을 때: $X$ 자리에 $(x - m)$ 을 쑤셔 넣고, $Y$ 자리에 $(y - n)$ 을 쑤셔 넣는다!
따라서 허공 좌표 $(m, n)$ 위치에 꼭짓점 엉덩이를 꽂고 있는 포물선의 최종 코드는 아래와 같이 더러운 괄호 폭탄으로 바뀝니다. \((y - n)^2 = 4p(x - m)\)
이 수식을 마주한다면 쫄지 말고 역추적 해킹(Decoding) 을 발동하세요.
- “아, $X$ 자리에 $(x-m)$ 이 병합되었고, $y$자리에 $(y-n)$ 이 들어있네?”
- “이건 원래 $y^2 = 4px$ 였던 정직한 놈이 엑셀 화살표 키로 $(m, n)$ 오프셋만큼 평행이동 좌표를 렌더링 당한 변종 스킨에 불과하다!”
- “당연히 초점도 원래 $(p, \ 0)$ 에서 $\rightarrow (p + m, \ n)$ 으로 같이 이동했을 테고, 준선 바닥 한계도 $x = -p$ 에서 $\rightarrow x = -p + m$ 좌표로 널빤지가 이동했겠군!”
이것이 이차 곡선의 “표준형 평행이동(Standard form translation)” 이라는 그래픽스 프로그래밍 기법입니다. 다음 단원에서는 이 거대한 지식을 바탕으로 직접 파이썬 스크립트 시뮬레이터를 가동해 우주에 원과 포물선을 렌더링 해보겠습니다!