DEV Community

Cover image for Navigating with Vector Trigonometry: Why the E6B Wind Triangle Works (and Where 60:1 Rules Fail)
miad
miad

Posted on Originally published at aeroway.org

Navigating with Vector Trigonometry: Why the E6B Wind Triangle Works (and Where 60:1 Rules Fail)

In aviation navigation, an aircraft never travels along the heading its nose is pointed unless the ambient wind is dead calm or directly aligned with the track.

Every pilot learns to solve the Navigational Wind Triangle—the closed velocity vector triangle balancing True Airspeed (TAS), Wind Velocity (W), and resultant Groundspeed (GS).

In this technical breakdown, we derive the closed-form Law of Sines Wind Correction Angle (WCA), implement a deterministic calculation engine in TypeScript, and analyze where cockpit mental heuristics (like the 60:1 rule and clock code) diverge from physical reality.


1. Vector Kinematics: The Navigational Velocity Triangle

An aircraft moving through an active airmass experiences two independent velocity vectors:

  1. Air Vector (V_air): The aircraft’s velocity relative to the airmass. Magnitude is True Airspeed (TAS); orientation is True Heading (TH).
  2. Wind Vector (V_wind): The physical displacement velocity of the airmass relative to the earth. Magnitude is Wind Speed (W); orientation is the vector direction the wind is blowing towards (WD ± 180°).

Their vector sum yields the terrestrial trajectory across the earth's surface:

V⃗ground=V⃗air+V⃗wind \vec{V}{\text{ground}} = \vec{V}{\text{air}} + \vec{V}_{\text{wind}}

                (Air Vector: TAS @ TH)
               ▲
              / \
             /   \
            /     \ (Wind Vector: W @ WD±180°)
           /       ▼
          /─────────►
         (Ground Vector: GS @ TC)
Enter fullscreen mode Exit fullscreen mode

2. Trigonometric Derivation: The Law of Sines Crab Angle

To hold a desired geographic course (TC), the aircraft nose must crab into the wind by a specific Wind Correction Angle (WCA) such that the lateral component of true airspeed cancels lateral wind drift.

Let the relative wind angle θrel\theta_{\text{rel}} be the angular difference between wind origin (WD) and course (TC):

θrel=(WD−TC)(mod360∘)mapped to [−180∘,+180∘] \theta_{\text{rel}} = (\text{WD} - \text{TC}) \pmod{360^\circ} \quad \text{mapped to } [-180^\circ, +180^\circ]
  • Crosswind Component (XW):

    XW=W⋅sin⁡(θrel) XW = W \cdot \sin(\theta_{\text{rel}})
  • Longitudinal Headwind/Tailwind (HW):

    HW=W⋅cos⁡(θrel) HW = W \cdot \cos(\theta_{\text{rel}})

Applying the trigonometric Law of Sines to the internal angles of the wind triangle:

sin⁡(WCA)W=sin⁡(θrel)TAS \frac{\sin(\text{WCA})}{W} = \frac{\sin(\theta_{\text{rel}})}{\text{TAS}}

Solving explicitly for WCA:

WCA=arcsin⁡(W⋅sin⁡(θrel)TAS)=arcsin⁡(XWTAS) \text{WCA} = \arcsin\left(\frac{W \cdot \sin(\theta_{\text{rel}})}{\text{TAS}}\right) = \arcsin\left(\frac{XW}{\text{TAS}}\right)

Resultant Groundspeed (V_GS):

Because crabbing into the wind diverts a portion of forward airspeed sideways, the forward groundspeed along track is:

VGS=TAS⋅cos⁡(WCA)−HW=TAS2−XW2−HW V_{\text{GS}} = \text{TAS} \cdot \cos(\text{WCA}) - HW = \sqrt{\text{TAS}^2 - XW^2} - HW

3. The Mathematical Boundary: Track Feasibility

What happens when the crosswind component exceeds the aircraft's true airspeed ( ∣XW∣>TAS|XW| > \text{TAS} )?

∣XWTAS∣>1.0  ⟹  arcsin⁡(XWTAS)∉R \left|\frac{XW}{\text{TAS}}\right| > 1.0 \implies \arcsin\left(\frac{XW}{\text{TAS}}\right) \notin \mathbb{R}

The argument to the inverse sine function falls outside [-1.0, +1.0].

Physical Interpretation: Even if the aircraft turns 90° directly into the crosswind, the airmass drifts sideways faster than the aircraft can fly forward. Maintaining the desired geographic course is physically impossible under that velocity state.


4. Deterministic TypeScript Implementation

Below is the pure mathematical implementation used in the Aeroway calculation suite:

export interface WindTriangleResult {
  relativeWindAngleDeg: number;
  crosswindKnots: number;
  headwindKnots: number;
  isFeasible: boolean;
  windCorrectionAngleDeg: number;
  trueHeadingDeg: number;
  groundspeedKnots: number;
}

export function solveWindTriangle(
  trueCourseDeg: number,
  trueAirspeedKnots: number,
  windDirectionDeg: number,
  windSpeedKnots: number
): WindTriangleResult {
  // 1. Compute relative wind angle mapped to [-180, +180]
  let diff = (windDirectionDeg - trueCourseDeg) % 360;
  if (diff > 180) diff -= 360;
  if (diff < -180) diff += 360;
  const relAngleRad = (diff * Math.PI) / 180;

  // 2. Orthogonal vector decomposition
  const crosswind = windSpeedKnots * Math.sin(relAngleRad);
  const headwind = windSpeedKnots * Math.cos(relAngleRad);

  // 3. Evaluate track feasibility boundary
  const sinWca = crosswind / trueAirspeedKnots;
  if (Math.abs(sinWca) > 1.0) {
    return {
      relativeWindAngleDeg: diff,
      crosswindKnots: crosswind,
      headwindKnots: headwind,
      isFeasible: false,
      windCorrectionAngleDeg: 0,
      trueHeadingDeg: trueCourseDeg,
      groundspeedKnots: 0,
    };
  }

  // 4. Closed-form Law of Sines solution
  const wcaRad = Math.asin(sinWca);
  const wcaDeg = (wcaRad * 180) / Math.PI;

  // 5. True Heading & Groundspeed
  let trueHeading = (trueCourseDeg + wcaDeg) % 360;
  if (trueHeading <= 0) trueHeading += 360;

  const groundspeed = trueAirspeedKnots * Math.cos(wcaRad) - headwind;

  return {
    relativeWindAngleDeg: diff,
    crosswindKnots: Math.round(crosswind * 10) / 10,
    headwindKnots: Math.round(headwind * 10) / 10,
    isFeasible: true,
    windCorrectionAngleDeg: Math.round(wcaDeg * 10) / 10,
    trueHeadingDeg: Math.round(trueHeading),
    groundspeedKnots: Math.max(0, Math.round(groundspeed * 10) / 10),
  };
}
Enter fullscreen mode Exit fullscreen mode

5. Cockpit Mental Heuristics vs. Exact Trigonometry

In high-workload cockpits, pilots use two primary rules of thumb:

  • The 60:1 Rule: WCAest≈XWTAS/60=XWMiles per Minute\text{WCA}_{\text{est}} \approx \frac{XW}{\text{TAS} / 60} = \frac{XW}{\text{Miles per Minute}}
  • The Clock Code: Crosswind is estimated by treating relative angle as minutes on a clock (15° = 1/4, 30° = 1/2, 45° = 3/4, 60° = Full).

Divergence Analysis (Baseline: 120 kt TAS, 30 kt Wind):

Relative Angle (θ) Exact XW Clock XW Exact WCA 60:1 WCA Error Divergence
15° 7.8 kt 7.5 kt +3.7° +3.9° +0.2°
30° 15.0 kt 15.0 kt +7.2° +7.5° +0.3°
45° 21.2 kt 22.5 kt +10.2° +10.6° +0.4°
60° 26.0 kt 30.0 kt +12.5° +13.0° +0.5°
90° 30.0 kt 30.0 kt +14.5° +15.0° +0.5°

While small-angle approximations keep 60:1 angular errors under 1° for typical GA speeds, the clock code can overestimate crosswinds by up to 15.5% at 60° relative wind angles.


6. Interactive Tools & Open Courseware


Standards: FAA-H-8083-25C (PHAK Ch. 16) • FAA-H-8083-18 • ICAO Annex 2 • EASA CS-23

Top comments (0)