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 measurementsare 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.
Hidden error analysis
The intercept is the tell. Theory puts it at zero; if your fit came back with a nonzero one, that is the tape's zero-point offset showing itself in the data. A single shot could never have revealed it.
Now look at g again. Your answer is almost certainly too large, and by far more than your own ± allows. That ± came out of the scatter of your points, so it only measures random error. Air drag shortens every single shot in the same direction, so it never shows up as scatter — it quietly tilts the line, and a tilted line means a bigger g. This is the difference between a random and a systematic error: more shots shrink the first and do nothing at all to the second. An error bar is a statement about your scatter, never a promise about the truth.