Skip to main content

Scoring rules

Navigator scores a flight as penalty points. Lower is better, and a perfect flight is zero. The total is the plain sum of five independent categories:

Total = Timing + Elapsed + Course + Secret checkpoints + Fuel

This page is the authority on how each one is computed. Everything below describes what the app actually does, including the edge cases.

Before anything is scored​

Two preparation steps run first, and both affect the numbers.

The track is trimmed to the airborne portion​

Leading track points are discarded until three consecutive segments run at or above the takeoff speed setting (40 kts by default), so a single GPS jump while taxiing no longer ends the trim early. Duplicate timestamps are skipped rather than read as a stopped aircraft.

This is what keeps taxi time out of your first leg. It also means the setting matters: too low and taxiing is scored, too high and the start of your first leg is thrown away. If no takeoff is found at all, the track is kept whole rather than cut down.

Waypoint passages are matched in route order​

Navigator assigns each waypoint a track point, in route order, choosing the set of assignments with the smallest total miss distance. Each point's timestamp becomes the passage time and its distance the closest approach used for course points.

Matching in order is what makes a route that returns to its departure airport, or crosses itself, score correctly. Matching each waypoint to the nearest point anywhere in the flight — which is what Navigator used to do — could pick a point from the wrong end of the flight and produce zero or negative leg times.

The finish is taken before the landing. For the last waypoint, Navigator uses the closest approach flown before the aircraft settles below takeoff speed for good. Without that, an imported log that keeps recording through the circuit and rollout finishes the route at whatever point on the taxiway came nearest the airport reference point — timing the approach and landing into your last leg. Live tracks stop at the final passage, so they are unaffected.

Passage detection has no radius to satisfy: every waypoint gets a passage, even one you never came near. A waypoint missed by ten miles still produces a passage — with an enormous course penalty attached.

Grading does not interpolate

The passage time is the timestamp of a real recorded fix, so its precision is bounded by your log's sample rate: ±0.5 s at 1 Hz, but ±2.5–5 s for a log written every 5–10 seconds.

Live leg switching does interpolate along the line between fixes, so after an undo or a manual Jump to Leg the leg times you saw in the air can differ slightly from the graded score. Grading always recomputes from the track rather than reusing the live passages.

Too little track is an error, not a guess​

If the track has fewer fixes than the route has waypoints, grading fails with a message rather than inventing one. Navigator used to fabricate a two-point track from the route itself, stamped with the current time, which produced a confident and meaningless score. The track that does exist is still kept, as a draft you can grade later.

Timing points​

For each scored leg that has a planned time:

deviation = actual leg seconds − planned leg seconds
timing points = |deviation|

One point per second off, in either direction. Early costs exactly what late costs. Timing points for the flight are the sum across all scored legs.

Actual leg time is the interval between the two waypoint passages that bound the leg, floored at zero.

Unscored legs, and scored legs whose planned time is blank or unparseable, contribute nothing here.

Elapsed points​

elapsed points = |total actual seconds − total planned seconds|

Again one point per second — a second penalty on top of timing points, this time on the flight as a whole. It exists to catch a flight that was late on one leg and early on the next by the same amount: the timing points punish both, and elapsed points confirm whether the errors actually cancelled overall.

Elapsed points are zero unless both totals are greater than zero.

Unscored legs count toward the actual total

The two totals in that formula are not gathered the same way. Total planned sums only scored legs with planned times. Total actual sums every leg, scored or not.

So if you mark a leg unscored, its flown time still lands in the actual total while its planned time is absent from the planned total — and the elapsed penalty absorbs the whole difference. On a route where some legs are deliberately unscored, expect elapsed points to be large and read them as an artefact rather than as a timing result.

Course points​

Course points measure how close you flew to each checkpoint. They apply to the intermediate waypoints only — never the first waypoint and never the last, so a four-waypoint route has two scored checkpoints.

Two settings define the ramp, both in nautical miles:

  • Min Penalty Radius — default 0.75. Inside it, no penalty. The comparison uses a hair of tolerance, so the effective free radius is 0.76 NM.
  • Max Penalty Radius — default 5. Beyond it, the miss is treated as a gross error.

Let d be your closest approach to the checkpoint in NM, min the Min Penalty Radius, and max the Max Penalty Radius:

d < min + 0.01 → 0 points
d > max → 1000 points (unless the max limit is disabled)
otherwise → 100 + 500 × (d − min − 0.01) ÷ (max − min − 0.01)

The middle band is a straight line from 100 points at the edge of the free radius to 600 points at the max radius. Past the max radius the score jumps to a flat 1000 — a deliberate cliff, not a continuation of the ramp.

With the default settings:

Closest approachCourse points
0.50 NM0
0.76 NM100.0
1.00 NM128.3
2.00 NM246.2
3.00 NM364.2
5.00 NM600.0
5.01 NM1000.0

Disable max miss limit removes the cliff: the penalty is then capped at 600 no matter how far off you were. Use it when your event does not have a bust rule, or when you want to see a sane number for a flight that would otherwise be all 1000s.

Secret checkpoint points​

Skipped entirely unless Total is greater than zero. Otherwise:

missed = max(0, total − correct)
points = missed × 100 + incorrect × 200

A checkpoint you failed to identify costs 100. One you identified wrongly costs 200 — double, because a confident wrong answer is worse than no answer.

Note that incorrect is its own input, not derived from the others. Enter what the scorer recorded.

Fuel points​

Skipped unless both Estimated and Actual are filled in and the estimate is greater than zero. Otherwise, with est and act in gallons:

error = act − est
fraction = error ÷ est

The penalty is exponential in the fractional error, so the curve is scale-free — being 10% off costs the same whether you are flying a Cub or a Baron — and it is asymmetric:

fraction > 0 (burned more than estimated) → 500 × (e^|fraction| − 1)
fraction < 0 (burned less than estimated) → 250 × (e^|fraction| − 1),
but 0 if |fraction| ≤ 0.10
fraction = 0 → 0

Underestimating is penalised at twice the rate of overestimating, and gets no grace. Overestimating gets a 10% free band. The asymmetry is the point: planning to land with less fuel than you actually need is the error with real consequences.

With a 20-gallon estimate:

Actual burnFractional errorFuel points
21.0 gal+5% under-estimate25.6
22.0 gal+10% under-estimate52.6
24.0 gal+20% under-estimate110.7
30.0 gal+50% under-estimate324.4
18.0 gal−10% over-estimate0 (within grace)
17.0 gal−15% over-estimate40.5
15.0 gal−25% over-estimate71.0
10.0 gal−50% over-estimate162.2

The signed fuelError in gallons is preserved in the JSON export alongside the points.

A worked example​

A four-waypoint route — KAAA → ALPHA → BRAVO → KBBB — flown with all three legs scored:

LegPlannedActualDeviationTiming points
1 KAAA → ALPHA10:0010:12+12 s12.0
2 ALPHA → BRAVO8:007:53−7 s7.0
3 BRAVO → KBBB12:0012:04+4 s4.0
Total30:0030:09+9 s23.0

Checkpoints — ALPHA and BRAVO only, since KAAA and KBBB are the endpoints:

CheckpointClosest approachCourse points
ALPHA0.41 NM0
BRAVO1.30 NM163.7

Four secret checkpoints, three called correctly, none called wrongly. Fuel estimated at 20.0 gal, actual 21.0 gal.

Timing = 23.0 (12 + 7 + 4)
Elapsed = 9.0 (|30:09 − 30:00|)
Course = 163.7 (0 + 163.7)
Secret = 100.0 (1 missed × 100)
Fuel = 25.6 (500 × (e^0.05 − 1))
─────────────────
Total = 321.3

What Navigator does not score​

  • Altitude. Nothing in the scoring reads the altitude field, in the track log or from GPS.
  • Heading or track angle. Only position and time.
  • Course between checkpoints. Course points measure closest approach to each checkpoint, not cross-track error along the leg. A wide detour that still passes over both checkpoints scores no course points — it shows up as timing error instead.
  • Landing, pattern work, or anything after the last waypoint.