중력은 왜 매번 포물선을 그릴까?
공을 던진다. 공기저항은 무시. 가로 방향 운동은 시간을 그대로 간다 — 영원히 같은 속력. 세로 방향 운동은
위젯에서 각도·속력·중력을 끌어보자. 경로는 늘 지면으로 다시 닫힌다. 정점은 늘 가운데. 갈색 vₓ 화살표는 길이가 일정하고 파란 v_y 화살표는 정점에서 0이 되었다가 내려오며 뒤집힌다. 이게 그림의 전부다.
두 운동, 공 하나
공이 손을 떠나면 그 위에 작용하는 힘은
운동 방정식
발사 속도를 성분으로 나누자: , . 가로 성분은 일정. 세로 성분은 매초 씩 줄어든다 — 아래로 향하는 일정한
x(t) = v₀ cos θ · t
y(t) = v₀ sin θ · t − ½ g t²이 한 쌍이 매개변수 곡선 — 시간 매개변수 를 공유하는 두 함수. 이 곡선의 이미지는 운동장 위에 그려진 모양, 매개변수화는 시간상의 실제 운동. 같은 이미지를 여러 매개변수화가 칠해낼 수 있다 — 곧 본다.
“한 번 적분하면 위치”라는 문구가 여기서 진짜 일을 하고 있다. 중력이 가속도를 준다. 가속도를 적분하면 속도가 되고, 속도를 적분하면 위치가 된다. 포물선은 마술이 아니다 — 변화가 두 번 쌓인 결과다. 적분 상수는 초기 조건이 정한다 — 에서 속도는 발사 속도 (아직 떨어지지 않았으니), 위치는 발사점 (아직 움직이지 않았으니). 두 번의 적분, 두 개의 상수, 닫힌 형식의 궤적 하나.
import math
# Two motions, independent. The horizontal one ignores gravity;
# the vertical one ignores horizontal velocity.
def position(t, v0, theta_deg, g):
th = math.radians(theta_deg)
x = v0 * math.cos(th) * t # uniform velocity → linear in t
y = v0 * math.sin(th) * t - 0.5 * g * t**2 # constant accel → quadratic
return x, y
def velocity(t, v0, theta_deg, g):
th = math.radians(theta_deg)
return v0 * math.cos(th), v0 * math.sin(th) - g * t
position(0.0, 20, 45, 9.8) # → (0.0, 0.0) start
position(1.0, 20, 45, 9.8) # → (14.14, 9.24)
velocity(1.0, 20, 45, 9.8) # → (14.14, 4.34) vy decreased시간을 지우면 포물선이 보인다
를 에 대해 풀면 . 이걸 에 넣자:
y(x) = (tan θ) · x − g · x² / (2 v₀² cos²θ)이게 에 대한 이차식. 에 대한 독립적인 두 선형 과정의 자취는 필연적으로 에 대한 이차식이 되고, 이차식의 그래프는
# Eliminate t. Substitute t = x / (v0 cos θ) into y(t):
# y = (tan θ) · x − g · x² / (2 v0² cos²θ)
# That's a quadratic in x — a parabola. The motion's image, with
# the time-axis collapsed.
def trajectory(x, v0, theta_deg, g):
th = math.radians(theta_deg)
a = -g / (2 * v0**2 * math.cos(th)**2)
b = math.tan(th)
return a * x**2 + b * x
trajectory(14.14, 20, 45, 9.8) # → 9.24 (matches y from arc2 — same image)아무 것도 풀지 않고 읽히는 것
식에서 네 가지가 떨어진다.
- 정점까지의 시간. 세로 속도 가 0이 되는 시점: . 이때 공이 최고점.
- 착지까지의 시간. 대칭으로 내려오는 길은 올라간 길의 거울: . 위젯의 통계 줄이 보여준다.
- 사거리. . , 즉 발사각 에서 최대. 가장 멀리 가는 던지기는 위로 가는 힘과 앞으로 가는 힘이 정확히 반씩 나뉜 던지기.
- 대칭. 정점은 . 착지 속력은 발사 속력과 같다 (같은 , 부호만 뒤집힌 같은 크기의 ). 공기저항이 없으면 공기에게 에너지를 잃지 않는다.
# Standard closed forms — read off the parabola without solving anything.
def t_peak(v0, theta_deg, g):
return v0 * math.sin(math.radians(theta_deg)) / g
def t_land(v0, theta_deg, g):
return 2 * t_peak(v0, theta_deg, g) # symmetric flight
def range_(v0, theta_deg, g):
return v0**2 * math.sin(math.radians(2 * theta_deg)) / g
def y_max(v0, theta_deg, g):
return v0**2 * math.sin(math.radians(theta_deg))**2 / (2 * g)
range_(20, 45, 9.8) # → 40.82 (max range at 45° on a flat field)
y_max(20, 45, 9.8) # → 10.20같은 이미지, 다른 운동
매개변수 곡선 모듈이 정밀하게 만든 이미지 vs 매개변수화 구분이 여기서도 그대로 적용된다. 를 보자: 포물선 모양은 와 비율 에만 의존한다. 와 를 알맞은 배율로 함께 키우면 같은 포물선을 다른 시간에 걸쳐 지나간다. 알맞은 속력으로 달에서 던지면 지구에서 던질 때와 모양은 똑같지만 더 느리게 — 같은 모양을 그리는 데 달의 시계는 다르게 흐르니까.
베지에 곡선, 그리고 모듈이 된 매개변수 곡선 스파이크와 똑같은 교훈: 그림은 그림이고, 그것을 칠하는 움직임은 또 다른 것. 두 매개변수화가 세세한 부분에서 모두 달라도 만들어내는 이미지는 같을 수 있다.
포물선은 공기를 무시할 때 나오는 궤적이다. 40 m/s로 던진 야구공의 레이놀즈 수는 ~10⁵; 항력은 작은 보정 정도가 아니다. 145 g 공에 2차 항력 를 넣고 같은 식을 풀면, **θ = 45°**에서 사거리가 ~163 m (진공)에서 ~98 m (공기)로 줄고, 최적 각도도 **45°**에서 **~38°**로 옮겨간다. 깔끔한 포물선은 진공에서나 나오는 모양. 실제 야외의 궤적은 그것과 닮긴 했지만, 비대칭이고, 짧게 끊긴다.
가로는 시간을 그대로 간다. 세로는 중력에 진다. 등속과 등가속이 만나 만든 두 독립된 이야기의 자취가 포물선. 모양은 레시피, 움직임은 이야기.
공이 , , 로 발사된다. 과 최고 높이를 구하라. 사용.
와 에서 를 유도하라. 위젯에서 일 때 사거리가 최대인지 확인.
두 던지기가 같은 발사각 를 가진다. 하나는 , 다른 하나는 . 둘이 같은 포물선 를 그리지만 두 번째가 시간상 더 빠르다는 것을 보여라. 어느 양이 이미지를 결정하고, 어느 양이 운동을 결정하는가?
시간 계산을 전혀 하지 않고, 착지 시 공의 속력이 발사 속력 와 같음을 논증하라. (같은 높이, 공기저항 무시.) 착지 순간 속도 벡터가 지면과 이루는 각은?
물리 입문서 대부분은 “발사된 물체는 포물선을 그린다”로 연다 — 두 가정 (공기 무시, g 상수)의 결과가 아니라 자연의 사실인 것처럼. 독자는 무엇을 내어주고 “포물선”을 얻었는지 모른 채 그 단어만 챙긴다. Lemma는 두 운동 — 수평 등속, 수직 자유낙하 — 을 끝까지 분리해 둔다. 그래서 포물선이 구호가 아니라 정리의 모습으로 도착한다. 그리고 위 counterexample이 분명히 말한다: 야외에서는 포물선이 이미 틀린 그림이다.