Crosswind heading calculator
At 100 knots of airspeed with a 20-knot crosswind, you must crab about eleven and a half degrees into the wind and your ground speed drops to almost ninety-eight knots. Enter both speeds in the same unit to get the heading correction. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Airspeed
- 100
- Wind speed
- 20
- Heading correction rad
- 0.2013579208
- Heading correction deg
- 11.5369590328
- Ground speed
- 97.9795897113
Holding a straight ground track in a pure crosswind means pointing the nose into the wind by a wind correction angle while accepting a lower ground speed along the track. Pilots, sailors, and robotics operators solve the same wind triangle: the sine of the crab angle equals crosswind over airspeed, and ground speed is the remaining along-track component after the sideways wind is cancelled by that crab. No weather fetch, no runway database, and no network call—only the deterministic pure-crosswind triangle from two numbers.
What pure crosswind correction means and how the triangle is solved
In the pure crosswind case the wind vector is perpendicular to the desired ground track. True airspeed is the speed of the vehicle relative to the air mass; ground speed is the speed of the vehicle relative to the ground along the intended track. To cancel the sideways drift you must crab into the wind by a wind correction angle WCA such that the lateral component of airspeed equals the crosswind.
That identity is sin of WCA equals wind speed divided by airspeed, so WCA equals arcsin of that ratio. The along-track component that remains is airspeed times cosine of WCA, which algebraically equals the square root of airspeed squared minus wind speed squared. When wind is zero the correction is zero and ground speed equals airspeed.
When wind equals airspeed the correction reaches ninety degrees and ground speed collapses to zero—you can only hold position sideways relative to the air mass, with no forward progress on the track. Units are free as long as airspeed and wind share the same unit: knots with knots, metres per second with metres per second, miles per hour with miles per hour.
The calculator does not convert units, does not model headwind or tailwind components, and does not apply density altitude or instrument corrections; it implements only the pure perpendicular wind triangle that training manuals use for the first crab-angle estimate.
Where crosswind correction earns its keep
Flight schools and ground-school apps need a deterministic oracle so every student browser and every LMS auto-grader agree on the crab angle for the same airspeed and crosswind pair. Sail and powerboat routing tools apply the same triangle when current or wind is treated as a pure beam component. Failed validation does not consume balance.
Keep requests small, pin the rounded correction and ground speed in tests, and you get reproducible pure-crosswind results for training worksheets, mission planners, and edge workers without standing up weather or navigation infrastructure of your own. Related component tools that only split wind into cross and head components answer a different search intent; this capability answers the hold-course heading and ground-speed question end to end.
What you can do with it
Flight training and ground school
Compute crab angle and ground speed for pure crosswind problems so students and auto-graders share one deterministic wind-triangle answer.
Mission and route planners
Estimate track-holding heading correction and along-track ground speed when wind is modelled as a pure beam component for UAS or surface craft.
FAQ
Is this the same as a crosswind component calculator?
No. A crosswind component splits a known wind into cross and head parts from an angle. This tool assumes pure crosswind and returns the heading correction and ground speed needed to hold course.
Which units should I use for airspeed and wind?
Any consistent pair—knots, m/s, mph, or other. Outputs use the same unit as the inputs. The calculator does not convert between units.
Why is my ground speed lower than my airspeed?
Because part of your airspeed is spent cancelling the sideways wind. Only the along-track component is left, which equals the square root of airspeed squared minus wind speed squared. With no wind, ground speed equals airspeed.
Does it handle headwind or tailwind?
No. It solves only the pure crosswind triangle, with the wind perpendicular to your track. It does not split a wind into head and cross parts, convert units or apply density altitude corrections.
What happens if the crosswind is stronger than the airspeed?
The tool rejects the values, because no real angle can cancel that much drift. When the wind exactly equals airspeed, the correction reaches ninety degrees and ground speed falls to zero, with no forward progress.
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/mech/crosswind-correction \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"airspeed":100,"wind_speed":20}'const res = await fetch("https://api.kit.forhosting.com/mech/crosswind-correction", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"airspeed": 100,
"wind_speed": 20
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/mech/crosswind-correction",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"airspeed": 100,
"wind_speed": 20
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/mech/crosswind-correction", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"airspeed":100,"wind_speed":20}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"airspeed":100,"wind_speed":20}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/mech/crosswind-correction", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"airspeed": 100,
"wind_speed": 20
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "mech.crosswind_correction",
"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
This crosswind heading calculator accepts true airspeed and pure crosswind speed in matching units, returns the heading correction in degrees and radians plus ground speed, and fails with invalid_input when wind exceeds airspeed so sin of the correction angle would leave the real range.
What pure crosswind correction means and how the triangle is solved
When wind exceeds airspeed there is no real angle that balances the lateral drift, so the capability rejects the request instead of inventing a complex angle.
Input contract, response shape, and error behaviour
Example: airspeed one hundred and wind speed twenty yields a heading correction of about eleven point five four degrees and a ground speed of about ninety-seven point nine eight in the same units. Floats are rounded for stable cross-runtime comparison so goldens and client tests pin the same digits. POST a JSON body with two required finite numbers: airspeed (true airspeed magnitude, strictly greater than zero) and wind_speed (pure crosswind magnitude, non-negative and not greater than airspeed). Each field may arrive as a JSON number or as a numeric string. Aliases tas, air_speed, and va are accepted for airspeed; wind, crosswind, and vw are accepted for wind_speed. Missing fields, empty strings, NaN, Infinity, non-positive airspeed, and negative wind_speed fail with invalid_input messages that name the field. On success the body echoes cleaned airspeed and wind_speed, heading_correction_rad and heading_correction_deg for the wind correction angle, ground_speed along the track, unit set to same_as_input, the formula string WCA equals asin of wind over airspeed and GS equals sqrt of airspeed squared minus wind squared, and method pure_crosswind_triangle. Pair the numbers with your own compass arithmetic if you need absolute magnetic heading from a known track; this endpoint returns only the signed pure-crosswind correction magnitude from the triangle, not runway bearings or magnetic variation.
Where a crosswind heading API earns its keep
Small unmanned aircraft and ground-robot planners call a tiny parse endpoint instead of embedding trigonometry ad hoc in every client.
Integration use cases
Worksheets and live SEO widgets
Power a free browser crosswind heading calculator whose results match the paid API on the same pure module for demos and homework checks.
Technical questions
How do I calculate heading correction for a pure crosswind?
Send positive airspeed and non-negative wind_speed in the same units. The API returns WCA = asin(wind_speed/airspeed) in degrees and radians, plus ground_speed = sqrt(airspeed² − wind_speed²).
What happens if wind speed exceeds airspeed?
The task fails with invalid_input. No real wind correction angle can cancel a pure crosswind stronger than airspeed, so the track cannot be held and the call is not billed.
What does the crosswind heading calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.