DataMining: fixed one English metric name; added relative start metric

This commit is contained in:
Axel Uhl
2024-11-11 18:12:20 +01:00
parent e68b434e8f
commit 54517eb5bf
4 changed files with 26 additions and 12 deletions
@@ -119,7 +119,7 @@ TackAtStart=Tack at Start
SpeedTenSecondsAfterStart=Speed 10s After Start
RankThirtySecondsAfterStart=Rank 30s After Start
WindwardDistanceToAdvantageousEndOfLineAtStartOfRace=Windward Distance to Advantageous End of Line at Start of Race
WindwardDistanceToAdvantageousEndOfLineAtStartOfCompetitor=Windward Distance to Starboard Side of Line at Start of Competitor
WindwardDistanceToAdvantageousEndOfLineAtStartOfCompetitor=Windward Distance to Advantageous Side of Line at Start of Competitor
RankAfterHalfOfTheFirstLeg=Rank after the half of the first leg
AdvantageousEndOfLine=Advantageous End of Line
AdvantageOfStarboardSideOfStartLine=Advantage of starboard side of start line
@@ -133,6 +133,7 @@ WindSourceType=Wind Source Type
AbsoluteWindwardDistanceToStarboardSideAtStartOfCompetitor=Absolute Windward Distance to Starboardside of Line at Start of Competitor
WindSourceName=Wind Source Name
RelativeDistanceToAdvantageousEndOfLineAtStartOfRace=Relative Distance to Advantageous End of Line at Start of Race
RelativeDistanceToAdvantageousEndOfLineAtStartOfCompetitor=Relative Distance to Advantageous End of Line at Start of Competitor
windFrom=True Wind Direction (TWD)
windSpeedKnots=True Wind Speed (kts)
speedInKnots=Speed (kts)
@@ -143,6 +143,7 @@ pitch=Neigung
heel=Krängung
WindwardDistanceToAdvantageousEndOfLineAtStartOfRaceVsRelativeDistanceToAdvantageousEndOfLine=Windwärtige Distanz zum Bevorteilten Ende der Startlinie zum Start des Rennens (X) vs. Relative Distanz zum Bevorteilten Ende der Startlinie zum Start des Rennens (Y)
RelativeDistanceToAdvantageousEndOfLineAtStartOfRace=Relative Distanz zum Bevorteilten Ende der Startlinie zum Start des Rennens
RelativeDistanceToAdvantageousEndOfLineAtStartOfCompetitor=Relative Distanz zum Bevorteilten Ende der Startlinie zum Startzeitpunkt des Teilnehmers
rideHeight=Foiling-Höhe
rideHeightPort=Foiling-Höhe Backbord-Rumpf
rideHeightStarboard=Foiling-Höhe Steuerbord-Rumpf
@@ -140,6 +140,9 @@ public interface HasRaceOfCompetitorContext {
@Statistic(messageKey="RelativeDistanceToAdvantageousEndOfLineAtStartOfRace", resultDecimals=2)
Double getRelativeDistanceToAdvantageousEndOfLineAtStartOfRace();
@Statistic(messageKey="RelativeDistanceToAdvantageousEndOfLineAtStartOfCompetitor", resultDecimals=2)
Double getRelativeDistanceToAdvantageousEndOfLineAtStartOfCompetitor();
@Statistic(messageKey="RaceDuration")
Duration getDuration();
@@ -360,9 +360,18 @@ public class RaceOfCompetitorWithContext implements HasRaceOfCompetitorContext {
@Override
public Double getRelativeDistanceToAdvantageousEndOfLineAtStartOfRace() {
TrackedRace trackedRace = getTrackedRace();
TimePoint startOfRace = trackedRace.getStartOfRace();
LineDetails startLine = trackedRace.getStartLine(startOfRace);
final TimePoint startOfRace = getTrackedRace().getStartOfRace();
return getRelativeDistanceToAdvantageousEndOfLine(startOfRace);
}
@Override
public Double getRelativeDistanceToAdvantageousEndOfLineAtStartOfCompetitor() {
final TimePoint competitorStartTimePoint = getTrackedRace().getTrackedLeg(getCompetitor(), getTrackedRace().getRace().getCourse().getFirstLeg()).getStartTime();
return getRelativeDistanceToAdvantageousEndOfLine(competitorStartTimePoint);
}
private Double getRelativeDistanceToAdvantageousEndOfLine(final TimePoint timePoint) {
final LineDetails startLine = getTrackedRace().getStartLine(timePoint);
Mark advantageousMark = null;
switch (startLine.getAdvantageousSideWhileApproachingLine()) {
case PORT:
@@ -375,14 +384,14 @@ public class RaceOfCompetitorWithContext implements HasRaceOfCompetitorContext {
if (advantageousMark == null) {
return null;
}
GPSFixTrack<Mark, GPSFix> advantageousMarkTrack = trackedRace.getOrCreateTrack(advantageousMark);
Position advantageousMarkPosition = advantageousMarkTrack.getEstimatedPosition(startOfRace, false);
GPSFixTrack<Competitor, GPSFixMoving> competitorTrack = trackedRace.getTrack(getCompetitor());
Position competitorPosition = competitorTrack.getEstimatedPosition(startOfRace, false);
Double distance = competitorPosition.getDistance(advantageousMarkPosition).getMeters();
TrackedLegOfCompetitor firstTrackedLegOfCompetitor = getTrackedRace().getTrackedLeg(competitor, trackedRace.getRace().getCourse().getFirstLeg());
TimePoint competitorStartTime = firstTrackedLegOfCompetitor.getStartTime();
Double length = trackedRace.getStartLine(competitorStartTime).getLength().getMeters();
final GPSFixTrack<Mark, GPSFix> advantageousMarkTrack = getTrackedRace().getOrCreateTrack(advantageousMark);
final Position advantageousMarkPosition = advantageousMarkTrack.getEstimatedPosition(timePoint, false);
final GPSFixTrack<Competitor, GPSFixMoving> competitorTrack = getTrackedRace().getTrack(getCompetitor());
final Position competitorPosition = competitorTrack.getEstimatedPosition(timePoint, false);
final Double distance = competitorPosition.getDistance(advantageousMarkPosition).getMeters();
final TrackedLegOfCompetitor firstTrackedLegOfCompetitor = getTrackedRace().getTrackedLeg(competitor, getTrackedRace().getRace().getCourse().getFirstLeg());
final TimePoint competitorStartTime = firstTrackedLegOfCompetitor.getStartTime();
final Double length = getTrackedRace().getStartLine(competitorStartTime).getLength().getMeters();
return distance / length;
}