From cbb15de7cc7fbf08ed7b43d663471945e3b13956 Mon Sep 17 00:00:00 2001 From: Lisa Date: Tue, 28 Nov 2023 18:41:33 +0100 Subject: [PATCH] bug5918: add space and change comparison of bearing --- .../sailing/domain/common/impl/WindImpl.java | 1 + .../impl/TrackedLegOfCompetitorImpl.java | 42 ++++++++++++------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/WindImpl.java b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/WindImpl.java index 22901946fb5..c83721702ff 100755 --- a/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/WindImpl.java +++ b/java/com.sap.sailing.domain.common/src/com/sap/sailing/domain/common/impl/WindImpl.java @@ -35,6 +35,7 @@ public class WindImpl extends KnotSpeedWithBearingImpl implements Wind { public static int hashCode(double latDeg, double lngDeg, long timePointAsMillis) { return (31 * (int) (timePointAsMillis & Integer.MAX_VALUE)) ^ (int) (Math.round(latDeg)*Math.round(lngDeg)); } + /** * Wind hash is determined based on time point and position only to speed this up a little. */ diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java index bace0d14905..da51a322494 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegOfCompetitorImpl.java @@ -1243,28 +1243,38 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor { private interface BravoTrackValueExtractor { R getValue(BravoFixTrack track, TimePoint from, TimePoint to); } + + @Override public TackType getTackType(TimePoint timePoint) throws NoWindException { + final TackType result; final Position competitorPosition = getTrackedRace().getTrack(competitor).getEstimatedPosition(timePoint, /* extrapolate */ true); - final TackType result; - MarkPassing start = getMarkPassingForLegStart(); - if (start != null && start.getTimePoint().compareTo(timePoint) <= 0) { - MarkPassing end = getMarkPassingForLegEnd(); - if (end != null && end.getTimePoint().compareTo(timePoint) >= 0) { - final Position waypointPosition = getTrackedRace().getApproximatePosition(getLeg().getTo(), timePoint); - final Bearing cog = getSpeedOverGround(timePoint).getBearing(); - final Bearing bearingToWaypoint = competitorPosition.getBearingGreatCircle(waypointPosition); - final Bearing bearingWind = getTrackedRace().getWind(competitorPosition, timePoint).getFrom(); - final Bearing diffWindtoBoat = bearingWind.getDifferenceTo(cog).abs(); - final Bearing diffMarktoBoat = bearingToWaypoint.getDifferenceTo(cog).abs(); - if (diffMarktoBoat.getDegrees() < diffWindtoBoat.getDegrees()) { - result = TackType.LONGTACK; + if (competitorPosition != null) { + final MarkPassing start = getMarkPassingForLegStart(); + if (start != null && timePoint.after(start.getTimePoint())) { + final MarkPassing end = getMarkPassingForLegEnd(); + if (end != null && timePoint.before(end.getTimePoint())) { + final Position waypointPosition = getTrackedRace().getApproximatePosition(getLeg().getTo(), + timePoint); + final Bearing cog = getSpeedOverGround(timePoint).getBearing(); + final Bearing bearingToWaypoint = competitorPosition.getBearingGreatCircle(waypointPosition); + final Bearing bearingWind = getTrackedRace().getWind(competitorPosition, timePoint).getFrom(); + final Bearing diffWindToBoat = bearingWind.getDifferenceTo(cog).abs(); + final Bearing diffMarkToBoat = bearingToWaypoint.getDifferenceTo(cog).abs(); + if (diffMarkToBoat.compareTo(diffWindToBoat) < 0) { + result = TackType.LONGTACK; + } else { + result = TackType.SHORTTACK; + } } else { - result = TackType.SHORTTACK; } + result = null; + } } else { - result = null; } + result = null; + } } else { - result = null; } + result = null; + } return result; } } \ No newline at end of file