bug6066: implement additional metrics for signed/unsigned relative XTE;

the value is computed relative to half the leg length (computed as great
circle distance between its from/to waypoints)
This commit is contained in:
Axel Uhl
2024-11-07 16:30:11 +01:00
parent 38018a4922
commit bc53ea4e4e
4 changed files with 31 additions and 4 deletions
@@ -249,8 +249,10 @@ TotalDistanceToNeighboursPerpendicularToStarLineAtStartOfRace=Sum of absolute di
TotalWindwardDistanceToNeighboursAtStartOfRace=Sum of absolute windward distances to start line neighbors at race start
TotalDistanceToNeighboursProjectedToStartLineAtStartOfRace=Sum of along-line distances to start line neighbors (or end of line, respectively) at race start
IRM=IRM Code (OCS, DNC, DNF, etc.)
XTE=Cross-Track Error
AbsoluteXTE=Absolute Cross-Track Error
XTE=Cross-Track Error, signed (- = left, + = right)
AbsoluteXTE=Absolute Cross-Track Error, unsigned
XTERelativeSigned=Relative Cross-Track Error, signed (-1 = 1/2 leg length left, 0 = middle, +1 = 1/2 leg length right)
XTERelativeUnsigned=Relative Cross-Track Error, unsigned (0 = middle, 1 = 1/2 leg length out)
Day=Day
CompetitorDay=Competitor Day
CompetitorDaySailingDomainRetrieverChain=Competitor-Day for race
@@ -252,8 +252,10 @@ TotalDistanceToNeighboursPerpendicularToStarLineAtStartOfRace=Summe der absolute
TotalWindwardDistanceToNeighboursAtStartOfRace=Summe der windwärtigen absoluten Abstände zu beiden Startlinien-Nachbarn
TotalDistanceToNeighboursProjectedToStartLineAtStartOfRace=Summe der Abstände zu beiden Startlinien-Nachbarn bzw. den Enden der Linie, projiziert auf die Startlinie
IRM=IRM Code (OCS, DNC, DNF etc.)
XTE=Querabweichung
AbsoluteXTE=Absolute Querabweichung
XTE=Absolute Querabweichung, vorzeichenbehaftet (- = links, + = rechts)
AbsoluteXTE=Absolute Querabweichung, ohne Vorzeichen
XTERelativeSigned=Relative Querabweichung, mit Vorzeichen (-1 = 1/2 Schenkellänge links, 0 = Mitte, +1 = 1/2 Schenkellänge rechts)
XTERelativeUnsigned=Relative Querabweichung, ohne Vorzeichen (0 = Mitte, 1 = ganz aussen)
Day=Tag
CompetitorDay=Teilnehmer-Tag
CompetitorDaySailingDomainRetrieverChain=Teilnehmer-Tag für Wettfahrt
@@ -36,6 +36,12 @@ public interface HasGPSFixContext {
@Statistic(messageKey = "AbsoluteXTE", resultDecimals = 2)
Distance getAbsoluteXTE();
@Statistic(messageKey = "XTERelativeSigned", resultDecimals = 2)
Double getRelativeXTESigned();
@Statistic(messageKey = "XTERelativeUnsigned", resultDecimals = 2)
Double getRelativeXTEUnsigned();
@Statistic(messageKey = "SmoothedSpeed", resultDecimals = 2)
Speed getSmoothedSpeed();
@@ -93,6 +93,23 @@ public class GPSFixWithContext implements HasGPSFixContext {
return getTrackedLegOfCompetitorContext().getTrackedLegOfCompetitor().getAbsoluteCrossTrackError(getTimePoint());
}
@Override
public Double getRelativeXTESigned() {
// The XTE is calculated relative to half the leg length
return getTrackedLegOfCompetitorContext().getTrackedLegOfCompetitor().getSignedCrossTrackError(getTimePoint())
.divide(getTrackedLegOfCompetitorContext().getTrackedLegContext().getTrackedLeg().getGreatCircleDistance(getTimePoint()))
* 2.0; // half the leg length
}
@Override
public Double getRelativeXTEUnsigned() {
// The XTE is calculated relative to the leg length
return getTrackedLegOfCompetitorContext().getTrackedLegOfCompetitor().getAbsoluteCrossTrackError(getTimePoint())
.divide(getTrackedLegOfCompetitorContext().getTrackedLegContext().getTrackedLeg().getGreatCircleDistance(getTimePoint()))
* 2.0; // half the leg length
}
@Override
public TackType getTackType() throws NoWindException {
return getTrackedLegOfCompetitorContext().getTrackedLegOfCompetitor().getTackType(getTimePoint());