04. 네 번째 수업: 초점(Focus) 과 준선(Directrix) 의 비밀
모든 코딩의 시나리오는 데이터 추적(Tracking) 에서 시작됩니다. 스크린 위에 초점(Focus) 이라는 점 $F$ 와, 준선(Directrix) 이라는 일직선 $L$ 을 그려봅시다. 이제 마우스 포인터 $P(x, y)$ 를 화면에 이리저리 움직이는데 모니터에 자바스크립트 버그 필터가 하나 걸려있습니다.
제약 조건 필터: 점 $P$ 는 무조건 점 $F$ 와 선 $L$에서 떨어진 거리가 ‘동일’ 해야만 모니터 픽셀에 렌더링 될 수 있다!
1. 줄다리기의 궤적 추적 (Tracking)
- 가장 팽팽한 한가운데 지점: 점 $F$ 와 선 $L$을 잇는 가장 짧은 수직 다리 한가운데를 딱 찍어봅시다. 이 점은 당연히 양쪽 거리가 같으므로 렌더링 합격, 이 지점을 포물선의 정중앙 꼭짓점(Vertex)이라고 부릅니다.
- 좌우로 이동하기 시작: 꼭짓점에서 오른쪽으로 마우스를 살짝 이동하면, 초점 $F$ 에서 멀어집니다. 조건을 유지하려면 초점에서 멀어진 만큼, 바닥의 기준선 $L$ 에서도 위로 들어 올려 도망쳐야($y$값 상승) 거리가 똑같이 유지됩니다!
- 끝없는 양옆 상승: $x$ 축을 따라 우측으로 미친 듯이 도망갈수록, 초점 $F$에서 멀어지는 팽창 거리를 보상받기 위해 점은 어쩔 수 없이 위로 위로 J커브를 그리며 치솟아 올라가야만 $1:1$ 거리 밸런스를 계속 맞출 수 있습니다.
이 $1:1$ 팽팽한 보상 법칙 조이스틱을 따라 자연스럽게 찍히는 점들을 이어보면, 그것이 완벽한 하늘을 향해 팔을 벌린 샴페인 잔 모양, 포물선이 쫙 렌더링 되어 열리는 것입니다!
2. 수식으로 해킹하기: $\mathbf{y^2 = 4px}$ 의 탄생
이 과정을 파이썬 거리 공식(math.hypot) 수식으로 치환해 봅시다.
- 초점의 좌표를 $F(p, 0)$ 이라 합시다.
- 준선의 위치를 $x = -p$ 라는 등뒤의 수직 벽이라 합시다. (꼭짓점은 정중앙인 $(0,0)$ 원점이 됩니다)
움직이는 점 $P(x, y)$ 의 거리 제약 조건을 풀어봅니다.
[초점까지의 직선거리] $==$ [준선 벽까지의 수직 거리] $\sqrt{(x - p)^2 + y^2} = |x + p|$
양쪽에 더러운 루트와 절댓값 기호를 날려버리기 위해 과감하게 양변 제곱 엔진을 갈겨줍시다!
$(x - p)^2 + y^2 = (x + p)^2$ $x^2 - 2px + p^2 + y^2 = x^2 + 2px + p^2$
양쪽에서 잡심볼들을 모조리 쳐내고, $x^2$ 과 $p^2$ 을 날리고 깔끔하게 남은 것만 좌변 우변으로 넘겨 정리하면 어떤 코드가 떨어질까요?
$y^2 = 4px$
이것이 인류가 찾아낸 포물선(Parabola) 의 가장 위대한 궁극의 렌더링 포맷코드입니다. 이 수식 안에는 모든 것이 들어있습니다. $p$ 값은 바로 아가리가 벌어지는 폭과 “초점이 원점에서 얼마나 멀리 떨어져 있는지” 를 알려주는 핵심 마스터 키입니다.
만약 통신사 엔지니어에게 $y^2 = 12x$ 라는 위성 안테나 설계도가 주어졌다고 합시다. 고급 코더는 1초 만에 이렇게 해석합니다. “아하! $4p = 12$ 니까 초점 $p=3$ 이군! 안테나의 철판 바닥 원점 중심부에서 정확히 $3$미터 허공 위에 수신기능 부품 마이크를 달아놔야 빛이 그곳 한 점으로 집중되겠군!”
이것이 수학 방정식이 세상을 조립하는 힘입니다.