Skip to content
← All method notes

Method note

Whole-leg VMG and steady-sailing VMG

How the pages separate what a boat gained over a whole leg from how it sailed when it was simply going in a straight line beside other boats.

Two questions about the same beat

The whole-leg index asks who got up the beat fastest. It takes the leg’s length along the course axis, divides by the time the boat took, and compares that with the middle of the fleet on the same numbered leg. Lanes, the side chosen, the shifts and every tack are inside it. It is the result.

The steady index asks how well a boat sailed when nothing else was going on: no turn, no rounding, no change of course, and other boats close enough to compare with. It is closer to mode and boatspeed. A boat can lose the beat and win the steady comparison, or the other way round, and that difference is usually the story of the leg.

Which seconds count as steady

Samples are taken every 5 s after the gun, but steadiness is checked every second. A second is steady when the boat is on a detected leg and at least 20 s from either end of it, at least 20 s from any tack or gybe, has a recorded position, course and speed, and its course stays within 8° of the current course at every second for 10 s either side.

A tack or gybe is where the boat’s aligned compass heading crosses the wind (or dead downwind) and holds the new side for 10 s. The 20 s exclusion either side covers the slowdown and the build back to speed.

How turns, roundings and route changes come out

Turns come out by the 20 s window. Roundings and the start come out by trimming 20 s from each end of every leg. Course changes come out by the steadiness test: a bear-away for a lane, a duck, a big change of mode, or sailing through a header all move the course by more than 8° inside 10 s and drop those seconds.

What the test cannot remove is the decision of where to sail. A boat that went to the right keeps its steady seconds on the right. The local wind estimate is what keeps that from turning into a speed claim: each sample is scored on the wind where the boat was, not on the course axis.

Who a boat is compared with

At each sample, the peers are the other boats that are steady at that same second, on the same numbered leg, within 600 m. At least 3 are needed; with fewer the sample is not scored. Both the boat and every peer are projected on the same direction: the local wind at the boat’s position, estimated with the boat itself left out of the fit.

The reference is the mean of the peers’ projections. A sample is dropped when that reference is under 0.5 kn or the boat is making no progress on the direction.

From samples to a race number

The race index is 100 times the boat’s summed VMG over the summed peer reference on the same samples. The speed index does the same with speed over the ground; direction efficiency is the VMG index over the speed index, so the two always multiply back to the VMG index. The course-axis lens uses exactly the same samples and peers projected on the fixed course axis, which isolates what the wind estimate contributes.

A race result needs at least 60 s of matched sailing and 10% of the boat’s eligible steady samples. Below that the cell is blank, not zero.

Across races

Each race counts once. The selected-race figure is the plain mean of the race indices that have a value, so a long race and a short one weigh the same and the mean always sits between the race cells. Matched coverage is the matched seconds over the eligible seconds across the same races.

How sure to be

Two checks sit beside every steady result. The direction check turns the local wind 5° each way and recomputes the index; if the range is wide, the ranking leans on the wind estimate. The neighbourhood check rebuilds the wind fit with its distance and time support at 0.75 and 1.25 of the default; a result that moves with the neighbourhood should be read cautiously. Neither is a confidence interval.

The tracks give ground course and speed only. Current, leeway, pressure differences across the course and true wind speed are not removed, and uneven coverage favours the parts of the race where the fleet sailed together.

The figures, one by one

Whole-leg VMG index

Each leg’s length along the course axis divided by the time the boat took to sail it, against the median of the fleet on the same numbered leg. Everything that happened on the leg counts: the lane after the start or rounding, the side chosen, the shifts, the tacks or gybes. A leg taking under 0.75 or over 1.5 times the fleet’s median leg time is blanked as a tracking fault, and so is a race value outside 60–140.

Unit
% of the race’s leg median (100 = median)
Reading it
Above 100 is a faster leg than the middle of the fleet.
Scope
Per race: the mean over that boat’s legs of the kind. Part 1 tiles: the median over races; Part 2’s whole-leg lens: the mean over races.
Rules this figure depends on, read from the analysis code
RuleValueSource
Leg time kept, as multiples of the fleet median0.75–1.5 ×fleet-race.ts · LEG_DURATION_BOUNDS
Whole-leg index treated as tracking60–140%fleet-regatta.ts · MIN_PLAUSIBLE_INDEX, MAX_PLAUSIBLE_INDEX

Steady VMG index, local wind

Only steady sailing counts: samples every 5 s, at least 20 s from a leg end and 20 s from any tack or gybe, with the course holding within 8° for 10 s either side. Each sample is compared with at least 3 other boats sailing steadily on the same numbered leg within 600 m, all projected on the local wind direction estimated without the boat being scored. A race result needs 60 s of matched sailing and 10% of the eligible samples.

Unit
% of matched peers (100 = peers)
Reading it
Above 100 is more progress to windward (or downwind) than the boats beside you at the same moment.
Scope
Per race: summed boat VMG over summed peer VMG on matched samples. Across races: the mean of race values, each race weighted equally.
Rules this figure depends on, read from the analysis code
RuleValueSource
Scoring sample interval5 swind-performance.ts · MATCHED_VMG_POLICY.sampleStepSeconds
Trimmed from each end of a leg20 swind-performance.ts · MATCHED_VMG_POLICY.legEdgeSeconds
Excluded either side of a tack or gybe20 swind-performance.ts · MATCHED_VMG_POLICY.maneuverSeconds
Course-steadiness window either side10 swind-performance.ts · MATCHED_VMG_POLICY.courseWindowSeconds
Largest course change inside that window8°wind-performance.ts · MATCHED_VMG_POLICY.courseToleranceDeg
Peer distance600 mwind-performance.ts · MATCHED_VMG_POLICY.peerRadiusM
Fewest steady peers on the same leg3 boatswind-performance.ts · MATCHED_VMG_POLICY.minPeers
Lowest peer reference VMG scored0.5 knwind-performance.ts · MATCHED_VMG_POLICY.minReferenceVmg
Matched time a race result needs60 swind-performance.ts · MATCHED_VMG_POLICY.minMatchedSeconds
Share of eligible samples a race result needs10%wind-performance.ts · MATCHED_VMG_POLICY.minMatchedShare

Steady VMG index, course axis

A control on the local-wind result: the samples and peers are identical, only the direction changes. Where the two agree, the wind estimate is not what separates the boats.

Unit
% of matched peers (100 = peers)
Reading it
Above 100 is more progress along the course axis than the matched peers.
Scope
The same samples and peers as the local-wind index, projected on the fixed course axis.
Rules this figure depends on, read from the analysis code
RuleValueSource
Peer distance600 mwind-performance.ts · MATCHED_VMG_POLICY.peerRadiusM
Fewest steady peers on the same leg3 boatswind-performance.ts · MATCHED_VMG_POLICY.minPeers

Speed and direction efficiency

Speed index is the boat’s summed speed over the ground against its peers’ on the matched samples. Direction efficiency is the VMG index divided by the speed index, times 100, so the two multiply back to the VMG index exactly. It is a projection ratio, not a measured pointing angle.

Unit
% of matched peers
Reading it
Speed above 100 is faster over the ground than the peers; direction above 100 turns more of that speed into VMG.
Scope
Per race on the matched samples; across races, the mean of race values.
Rules this figure depends on, read from the analysis code
RuleValueSource
Peer distance600 mwind-performance.ts · MATCHED_VMG_POLICY.peerRadiusM
Fewest steady peers on the same leg3 boatswind-performance.ts · MATCHED_VMG_POLICY.minPeers

Matched coverage

Eligible samples are the steady ones. A sample is matched when a local wind estimate exists there without the boat and at least 3 steady peers are on the same leg within 600 m. Low coverage means the result describes the part of the race where the fleet sailed together.

Unit
% of eligible steady samples, and minutes
Reading it
Higher is more of the boat’s steady sailing compared.
Scope
Matched seconds over eligible seconds across the selected races.
Rules this figure depends on, read from the analysis code
RuleValueSource
Fewest steady peers on the same leg3 boatswind-performance.ts · MATCHED_VMG_POLICY.minPeers
Peer distance600 mwind-performance.ts · MATCHED_VMG_POLICY.peerRadiusM
Share of eligible samples a race result needs10%wind-performance.ts · MATCHED_VMG_POLICY.minMatchedShare

Direction sensitivity

The index recomputed with the local direction turned 5° each way. It shows how much a wind error of that size would move the answer. It is not a confidence interval.

Unit
index range
Reading it
A narrow range means the result does not hinge on the wind estimate.
Scope
Per race; across races, the mean of each end.
Rules this figure depends on, read from the analysis code
RuleValueSource
Direction turned each way for the sensitivity5°wind-performance.ts · MATCHED_VMG_POLICY.sensitivityDeg

Wind-neighbourhood sensitivity

The wind fit rebuilt with its distance and time support scaled by 0.75 and 1.25. Peer distance stays at 600 m. The set of supported samples can change, so the matched minutes are shown with each value.

Unit
index and matched minutes
Reading it
Similar values at narrow, default and wide support are reassuring.
Scope
Per race, for the selected boat.
Rules this figure depends on, read from the analysis code
RuleValueSource
Narrow wind neighbourhood0.75 × defaultwind-performance.ts · SUPPORT_SENSITIVITY.narrow
Wide wind neighbourhood1.25 × defaultwind-performance.ts · SUPPORT_SENSITIVITY.wide
Peer distance600 mwind-performance.ts · MATCHED_VMG_POLICY.peerRadiusM

Speed and height

Medians of speed over the ground and of the angle between course and the course axis during steady leg sailing: at least 20 s from the leg ends and 20 s from turns, with the course within 8° 5 s either side. The angle is to the fixed course axis, so a boat sailing the lifted tack shows height it did not point for. Speed and angle are separate medians; they do not reconstruct a VMG.

Unit
% speed over ground; degrees of height (upwind) or depth (downwind)
Reading it
+ speed is faster than the race fleet; + height is higher upwind, + depth deeper downwind.
Scope
Per race against the race fleet’s median; regatta dots are medians over races.
Rules this figure depends on, read from the analysis code
RuleValueSource
Leg ends left out of steady leg medians20 sfleet-race.ts · LEG_STEADY_RULES.edgeSeconds
Turn window left out of steady leg medians20 sfleet-race.ts · LEG_STEADY_RULES.maneuverSeconds
Course tolerance for steady leg medians8°fleet-race.ts · LEG_STEADY_RULES.courseToleranceDeg
Course compared this far either side5 sfleet-race.ts · LEG_STEADY_RULES.courseOffsetSeconds

Analysis version: fleet-race-4 · fleet-regatta-1 · local-bisector-1/matched-vmg-1.The numbers in this note are read from the same code that computes the figures, so they change when it does.