SimuBoard App
Mechanics

Projectile Motion

Hero image for Projectile Motion

Throw a ball, fire a cannon, or launch a soccer kick, and the resulting path is a parabola — one of the cleanest and most useful results in introductory mechanics. Projectile motion is popular in physics courses for good reason: it needs nothing more than constant-acceleration kinematics, yet it produces a rich, testable, visually intuitive result.

The key idea: decompose into two independent problems

The entire trick to projectile motion is recognizing that horizontal and vertical motion don’t affect each other. Ignoring air resistance, the only force acting on a projectile mid-flight is gravity, which points straight down. That means:

  • Horizontally, there’s no force at all, so velocity is constant: vx(t)=v0xv_x(t) = v_{0x}
  • Vertically, gravity produces constant downward acceleration: vy(t)=v0y−gtv_y(t) = v_{0y} - gt

Two easy, independent 1-D kinematics problems, glued together only by a shared time variable tt.

Setting up the equations

If a projectile launches with initial speed v0v_0 at angle θ\theta above the horizontal, the initial velocity components are:

v0x=v0cos⁡θ,v0y=v0sin⁡θv_{0x} = v_0\cos\theta, \qquad v_{0y} = v_0\sin\theta

Position as a function of time then follows directly from constant-acceleration kinematics:

x(t)=v0cos⁡θ⋅tx(t) = v_0\cos\theta \cdot t y(t)=v0sin⁡θ⋅t−12gt2y(t) = v_0\sin\theta \cdot t - \frac{1}{2}gt^2

Everything else — range, maximum height, time of flight — falls out of these two equations.

Time of flight and maximum height

Setting y(t)=0y(t) = 0 (assuming launch and landing at the same height) and solving for the nonzero root gives the total time in the air:

tflight=2v0sin⁡θgt_{\text{flight}} = \frac{2v_0\sin\theta}{g}

The projectile reaches its peak at exactly half that time, when vy=0v_y = 0:

tpeak=v0sin⁡θg,ymax=v02sin⁡2θ2gt_{\text{peak}} = \frac{v_0\sin\theta}{g}, \qquad y_{\text{max}} = \frac{v_0^2\sin^2\theta}{2g}

The range equation

Plugging the time of flight into x(t)x(t) gives the horizontal range:

R=v0cos⁡θ⋅tflight=v02sin⁡(2θ)gR = v_0\cos\theta \cdot t_{\text{flight}} = \frac{v_0^2 \sin(2\theta)}{g}

(using the identity 2sin⁡θcos⁡θ=sin⁡(2θ)2\sin\theta\cos\theta = \sin(2\theta)). This single equation explains a well-known result: since sin⁡(2θ)\sin(2\theta) is maximized when 2θ=90°2\theta = 90°, the range is greatest at a 45° launch angle — and, notably, sin⁡(2θ)\sin(2\theta) gives the same value for complementary angles like 30° and 60°, so those two angles produce identical range, just with very different trajectories (one flat and fast, one high and slow).

Eliminating time: the trajectory equation

Solving the x(t)x(t) equation for tt and substituting into y(t)y(t) eliminates the time variable entirely, giving yy directly as a function of xx:

y=xtan⁡θ−g2v02cos⁡2θx2y = x\tan\theta - \frac{g}{2v_0^2\cos^2\theta}x^2

This is manifestly a parabola — a quadratic in xx — which is why every idealized projectile path looks the same geometric shape, just stretched or compressed depending on v0v_0 and θ\theta.

Image placeholder
Trajectories at 30°, 45°, and 60° launch angles plotted on the same axes, showing identical range for complementary angles

Simulating it directly

The equations above are exact for the idealized case, but it’s often more flexible to simulate the motion step by step, which also makes it trivial to add complications like drag later. A minimal Euler-integration loop looks like this:

const g = 9.81; // m/s^2
let vx = v0 * Math.cos(theta);
let vy = v0 * Math.sin(theta);
let x = 0, y = 0;
const dt = 0.01;

while (y >= 0) {
  x += vx * dt;
  y += vy * dt;
  vy -= g * dt;
}

console.log(`Landed at x = ${x.toFixed(2)} m`);

This is exactly the kind of numerical integration that underlies real physics engines — instead of solving the closed-form equations, you advance position and velocity by small time steps, which generalizes far better once forces stop being constant.

GIF placeholder
Step-by-step animation of the Euler integration loop tracing out the projectile's path

Try different angles side by side: the cleanest way to see how launch angle and initial speed trade off is to launch several projectiles at once and compare their paths. SimuBoard’s mechanical simulation engine renders the trajectory live on an infinite whiteboard, so you can adjust the angle, watch the parabola reshape in real time, and directly compare range and max height across launches.

Where the idealized model breaks down

Real trajectories deviate from this clean parabola for a few reasons:

  • Air resistance — drag scales with velocity squared for most projectiles at everyday speeds, which breaks the clean analytic solution and requires numerical integration (like the loop above) to solve.
  • Spin — a spinning ball experiences the Magnus effect, curving its path sideways — the basis of curveballs, banana kicks, and swing bowling.
  • Variation in gg — over very long ranges (artillery, ballistic missiles), the assumption of constant, uniform gravity starts to break down.

Even with those complications, the idealized parabola remains the right starting point: it’s the zeroth-order approximation that every more realistic model is built on top of.

Frequently asked questions

Why does projectile motion trace a parabola?

Because horizontal position grows linearly with time (constant velocity) while vertical position grows quadratically with time (constant acceleration from gravity). Plotting y against x, with x proportional to t and y proportional to t², eliminates t and leaves y as a quadratic function of x — the equation of a parabola.

What launch angle gives the maximum range?

45 degrees, when launching and landing at the same height with no air resistance. This falls directly out of the range formula R = v₀²sin(2θ)/g, which is maximized when sin(2θ) = 1, i.e. 2θ = 90°.

Does air resistance change the optimal launch angle?

Yes, significantly. With air drag, the optimal angle for maximum range is typically less than 45 degrees, because a flatter trajectory spends less time exposed to drag. This is one of many places where the idealized kinematics equations diverge from real-world ballistics.

Why do horizontal and vertical motion not affect each other?

Because gravity acts purely vertically, and in the idealized model there's no horizontal force at all. Since force determines acceleration independently along each axis (Newton's Second Law applied component-wise), the two directions never interact — a fact usually credited to Galileo, who first demonstrated it experimentally.