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 while the speed between the first two remaining points is below the takeoff speed setting (40 kts by default). Trimming stops as soon as a fast enough segment is found, or when only two points remain.

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.

Waypoint passage times are the closest track point

For each waypoint on the route, Navigator scans the whole trimmed track for the point that is physically closest to it. That point's timestamp becomes the passage time, and its distance becomes the closest approach used for course points.

There is no interpolation between track points — the passage time is the timestamp of a real recorded fix. Passage timing is therefore only as precise as your track log's sample rate. It also means passage detection has no radius to satisfy: every waypoint gets a passage, even one you never came near. A waypoint you missed by ten miles still produces a passage — it just produces an enormous course penalty with it.

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.