Why does gravity write a parabola, every time?
Throw a ball. Ignore air. Its horizontal motion keeps time — the same speed forever. Its vertical motion loses to
Drag the angle, the speed, and gravity in the widget. The path always closes back to the ground; the apex is always halfway across; the brown vₓ arrow stays the same length while the blue v_y arrow zeroes at the top and reverses on the way down. That’s the whole picture.
Two motions, one ball
Once the ball leaves your hand, the only force on it is
Equations of motion
Split the launch velocity into components: , . The horizontal component is constant; the vertical component decreases at a rate of (the constant downward
x(t) = v₀ cos θ · t
y(t) = v₀ sin θ · t − ½ g t²That pair is a parametric curve: two functions of a shared time parameter . The image of this curve is the shape on the field; the parametrization is the actual motion in time. Same image can be painted by many parametrizations — we’ll see one shortly.
The phrase “integrate once and you get position” is doing real work here. Gravity gives acceleration. Integrate acceleration to get velocity; integrate velocity to get position. The parabola is not magic — it is accumulated change twice. The constants of integration are fixed by initial conditions: at the velocity is the launch velocity (no fall yet) and the position is the launch point (no displacement yet). Two integrations, two constants, one closed-form trajectory.
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 decreasedEliminate time, see the parabola
Solve for : . Plug into :
y(x) = (tan θ) · x − g · x² / (2 v₀² cos²θ)That is a quadratic in . The trace of two independent linear processes (in ) is necessarily quadratic (in ) — and the graph of a quadratic is a
# 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)What you can read off without solving anything
Four facts fall out of the formula.
- Time to peak. Vertical velocity hits zero at . That is when the ball is highest.
- Time to land. By symmetry, the down-trip mirrors the up-trip: . The widget’s stat row shows it.
- Range. . Maximum at , i.e. launch angle . The longest throw is the one split evenly between up and forward.
- Symmetry. The peak sits at . The speed at impact equals the speed at launch (same , equal-magnitude opposite-sign ). Without drag, the ball loses no energy to the air.
# 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.20Same image, different motions
The image-vs-parametrization distinction the parametric-curves module makes precise applies right here. Look at : the shape of the parabola depends only on and the ratio . Double both and together by appropriate factors and you get the same parabola, traversed in a different time. A throw on the Moon with the right matching speed paints exactly the same shape as a throw on Earth — but slower, because the Moon’s clock for the same shape ticks differently.
That is the same lesson as Bezier curves and as the parametric-curves spike that became a module: the picture is one thing, the motion that paints it is another. Two parametrizations can disagree on every detail except the image they produce.
The parabola is the trajectory you get when you ignore air. A baseball thrown at 40 m/s has Reynolds number ~10⁵; drag is not a small correction. Compute the same equations with quadratic drag for a 145 g ball, and the range at θ = 45° drops from ~163 m (vacuum) to ~98 m (air) — and the optimal angle shifts from 45° to ~38°. The clean parabola is a vacuum object; real outdoor motion is one of those, asymmetric, foreshortened.
Horizontal keeps time. Vertical loses to gravity. Their independent stories — uniform velocity meeting constant acceleration — trace a parabola. The shape is the recipe; the motion is the story.
A ball is launched at , , with . Find and the maximum height. Use .
Starting from and , derive . Confirm in the widget that the range is largest at .
Two throws have the same launch angle : one with , the other with . Show that they paint the same parabola , but the second is faster in time. Which quantity controls the image, and which controls the motion?
Without doing any time calculation, argue that the ball’s speed at impact equals its launch speed . (Same height, no drag.) What about the angle the velocity vector makes with the ground at impact?
Most physics intros open with “objects in projectile motion follow a parabolic path” — stated as a fact about nature, not as a consequence of two assumptions (no air, constant g). The reader files away “parabola” without knowing what they traded for it. Lemma keeps the two motions visible — horizontal uniform, vertical free-fall — so the parabola arrives as a theorem, not a slogan. And the counterexample above admits the obvious: outdoors, the parabola is already wrong.