Projectile motion range calculator
On level ground a launch at 45° goes farthest, because the range then reduces to speed squared over g. Enter launch speed, angle and gravity to get the ideal horizontal range in metres, a vacuum benchmark before you add drag. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Speed
- 20
- Angle
- 45
- Gravity
- 9.80665
- Range
- 40.7886485191
The horizontal range of a projectile is how far it travels along level ground between launch and landing when air resistance is neglected. This projectile motion range calculator takes launch speed, launch angle, and gravitational acceleration and returns that range from the closed-form identity R equals v squared times the sine of twice the launch angle, all divided by g. Use it to check homework, size a sports throw, tune a game-physics sandbox, or obtain a vacuum upper bound before you add drag.
What the ground-level range formula actually computes
Ideal projectile motion on flat ground treats the launch as a two-dimensional kinematics problem with constant gravitational acceleration and no air resistance, wind, spin, or curvature of the planet. Horizontal speed stays at v times cosine of the launch angle, while vertical speed starts at v times sine of the angle and decreases linearly under a constant downward acceleration. The projectile returns to the launch height after a flight time of two v sine theta over g.
Multiplying that duration by the unchanging horizontal speed produces the compact identity R equals v squared times the sine of twice the launch angle, all divided by g. This calculator evaluates that identity and returns the range in metres when speed is in metres per second, angle is in degrees, and gravity is in metres per second squared. The derivation starts and ends at height zero, so a throw from a cliff, a balcony, or a raised platform is a different quadratic problem and is out of scope here.
Zero degrees is a purely horizontal toss that meets level ground immediately, so the reported range is zero. Ninety degrees is a purely vertical shot whose horizontal displacement is also zero. Forty-five degrees maximises range on level ground because the sine of ninety degrees is one, reducing R to v squared over g.
Complementary angles such as thirty and sixty degrees share the same ideal range, which is a useful self-check when you mark homework or compare two launch solutions in a game sandbox. Always treat the number as a vacuum, flat-ground benchmark, then layer drag or terrain separately when realism matters for sports, ballistics, or simulation work.
How to choose speed, angle and gravity inputs
Speed is the full launch magnitude in metres per second, not a separate horizontal or vertical component. Angle is measured above the horizontal in degrees and must lie in the closed interval from zero to ninety inclusive. Gravity is the downward acceleration in metres per second squared and must be strictly positive: a zero or negative value would make the range formula undefined or reverse the landing condition, so those inputs are rejected instead of returning Infinity or a signed curiosity.
Keep units consistent throughout: metres and seconds for speed and gravity, degrees for angle. Mixing kilometres per hour for speed with a classroom g of ten without converting will produce a number that is mathematically correct and physically meaningless for your problem statement. Typical Earth problems use nine point eight zero six six five metres per second squared; lunar homework, exam sheets that fix g at ten, and game worlds with custom acceleration all work as long as you pass the matching positive gravity.
What you can do with it
Physics homework and lab checks
Verify student calculations of horizontal range for ground-level launches with a known speed, elevation angle, and fixed g, including the forty-five-degree maximum and complementary-angle pairs.
Sports and ballistics rough estimates
Get a quick vacuum-range bound for a ball, javelin, or model rocket before adding drag, spin, or wind in a more complete flight model.
Game and simulation parameter setup
Pick launch speeds and angles that hit a target distance under ideal gravity, then tune drag coefficients against that baseline in a physics sandbox.
FAQ
What formula does the projectile motion range calculator use?
It uses the ideal ground-level identity R = v² · sin(2θ) / g, with the launch angle converted from degrees to radians. Launch and landing heights must match; cliff throws are out of scope.
Why must the launch angle stay between 0 and 90 degrees?
For a launch from ground level onto flat ground, only angles in that closed interval produce a sensible forward trajectory.
Does the calculator include air resistance?
No. Motion is vacuum kinematics with constant gravity and no drag. Real projectiles travel shorter distances; use the result as an upper-bound reference.
What units should I use for speed, angle, and gravity?
Speed in metres per second, angle in degrees above the horizontal, and gravity in metres per second squared. Mixing units without converting yields a mathematically valid but physically meaningless range.
Which two angles give the same range?
Any two angles that add up to 90°. Under ideal conditions they land at the same distance, which is a quick way to check two answers that look different but are both correct.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/phys/range-projectile-motion \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"speed":20,"angle":45,"gravity":9.80665}'const res = await fetch("https://api.kit.forhosting.com/phys/range-projectile-motion", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"speed": 20,
"angle": 45,
"gravity": 9.80665
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/phys/range-projectile-motion",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"speed": 20,
"angle": 45,
"gravity": 9.80665
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/phys/range-projectile-motion", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"speed":20,"angle":45,"gravity":9.80665}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"speed":20,"angle":45,"gravity":9.80665}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/phys/range-projectile-motion", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"speed": 20,
"angle": 45,
"gravity": 9.80665
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "phys.range_projectile_motion",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Launch angles outside the closed interval from zero to ninety degrees fail with invalid_input and are not billed. Successful API calls use the published base price of $0.002 per request.
How to choose speed, angle and gravity inputs
Zero speed is physically valid and yields a range of zero; a negative speed is rejected as invalid_input because a launch magnitude cannot be negative. Values outside that interval fail with invalid_input rather than wrapping, clamping, or inventing a different geometry. The same three fields power the free browser form and the API body, so a scripted check and a manual check never disagree on rounding or on which angles are legal.
Reading the result and using it in homework or pipelines
At forty-five degrees the sine of twice the angle is one, so range simplifies to v squared over g and is the maximum possible for a given speed on level ground. Complementary angles share that same range under ideal conditions, which is a fast way to mark two student answers that look different but are both correct. Failed validation never charges balance. When air drag, Magnus force, or uneven terrain matter, treat this range as the vacuum upper bound and compare against your more detailed simulator rather than replacing that model. The success payload returns range as the primary result, plus the echoed speed, angle, and gravity that were actually used, and a formula string restating R equals v squared times sine of twice theta over g. Successful API requests use the published base price of $0.002 per item; the browser tool remains free.
Technical questions
What does a successful call cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.