Projectile Range — Measuring g from a Launcher

Goal: Fire a ball at different angles, measure where it lands, and extract g from the shape of the range curve. Unlike the pendulum and free fall, here g comes from a fit across many angles rather than from a single timed event.

Where this comes from

Galileo was the first to argue that a projectile's motion splits into two independent pieces: a horizontal one that never changes, and a vertical one that falls exactly as a dropped stone does. Everything below follows from taking that claim seriously.

Theoretical background

A ball leaving the muzzle at speed v₀ and angle θ, landing back at launch height, travels a horizontal distance:

R = v₀² · sin(2θ) / g

Fire at several angles and plot R against sin(2θ). The points should fall on a straight line through the origin whose slope is v₀²/g. So a straight-line fit gives the slope m, and:

g = v₀² / m

Why fit rather than fire once and solve? A single shot carries the full reading error into the answer. A fit across angles averages that error down — and the intercept, which theory says must be zero, becomes a free check on whether the setup is honest.

1. Set up the experiment

Trajectory of the current shot. The dashed line marks the landing point you measure with the tape.

Launcher

45°

The launcher is calibrated; treat v₀ as known exactly.

—
Measured range (m)
Your tape measure reads to the nearest centimetre. Fire the same angle more than once and you will not get the same number twice — that scatter is the measurement, not a mistake.

2. Measurement data

3. Automatic calculation

A straight-line fit of R against sin(2θ), done for you. Section 4 asks you to do it properly.

Shots (n):0
Fitted slope (m = v₀²/g):—
Slope error (δm):—
Intercept (theory says 0):—
Fit quality (R²):—
g = v₀² / m = ? m/s²
Your result: —

4. Analysis with Python

The calculation above is a shortcut. Real analysis is done in Python + numpy + matplotlib, and that is what runs here — CPython compiled to WebAssembly, in your browser.

Your measurements are in trials_data — a list of dicts with keys theta_deg, sin2theta, R, v0. Edit the code and press Run.
Pyodide not loaded yet
Python output appears here

5. Reveal the true value

Once you have committed to an answer, press this to see the true g and the systematic errors that were quietly applied to your equipment.