mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-14 16:20:57 +00:00
Merge branch 'master' into textbox
This commit is contained in:
commit
ece5e747fa
2 files changed
+34
-24
No files matched your search
+20
-16
@@ -586,21 +586,25 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor {
|
||||
if (speedWhenSpeedStartedToDrop != null) {
|
||||
TimePoint timePointWhenSpeedLevelledOffAfterManeuver = fixes.get(fixes.size()-1).getTimePoint();
|
||||
SpeedWithBearing speedAfterManeuver = track.getEstimatedSpeed(timePointWhenSpeedLevelledOffAfterManeuver);
|
||||
// For upwind/downwind legs, find the mean course between inbound and outbound course and project actual and
|
||||
// extrapolated positions onto it:
|
||||
Bearing middleManeuverAngle = speedWhenSpeedStartedToDrop.getBearing().middle(speedAfterManeuver.getBearing());
|
||||
// extrapolate maximum speed before maneuver to time point of maximum speed after maneuver and project resulting position
|
||||
// onto the average maneuver course; compare to the projected position actually reached at the time point of maximum speed after
|
||||
// maneuver:
|
||||
Position positionWhenSpeedStartedToDrop = track.getEstimatedPosition(timePointWhenSpeedStartedToDrop, /* extrapolate */ false);
|
||||
Position extrapolatedPositionAtTimePointOfMaxSpeedAfterManeuver =
|
||||
speedWhenSpeedStartedToDrop.travelTo(positionWhenSpeedStartedToDrop, timePointWhenSpeedStartedToDrop, timePointWhenSpeedLevelledOffAfterManeuver);
|
||||
Position actualPositionAtTimePointOfMaxSpeedAfterManeuver = track.getEstimatedPosition(timePointWhenSpeedLevelledOffAfterManeuver, /* extrapolate */ false);
|
||||
Position projectedExtrapolatedPositionAtTimePointOfMaxSpeedAfterManeuver =
|
||||
extrapolatedPositionAtTimePointOfMaxSpeedAfterManeuver.projectToLineThrough(positionWhenSpeedStartedToDrop, middleManeuverAngle);
|
||||
Position projectedActualPositionAtTimePointOfMaxSpeedAfterManeuver =
|
||||
actualPositionAtTimePointOfMaxSpeedAfterManeuver.projectToLineThrough(positionWhenSpeedStartedToDrop, middleManeuverAngle);
|
||||
result = projectedActualPositionAtTimePointOfMaxSpeedAfterManeuver.getDistance(projectedExtrapolatedPositionAtTimePointOfMaxSpeedAfterManeuver);
|
||||
if (speedAfterManeuver != null) {
|
||||
// For upwind/downwind legs, find the mean course between inbound and outbound course and project actual and
|
||||
// extrapolated positions onto it:
|
||||
Bearing middleManeuverAngle = speedWhenSpeedStartedToDrop.getBearing().middle(speedAfterManeuver.getBearing());
|
||||
// extrapolate maximum speed before maneuver to time point of maximum speed after maneuver and project resulting position
|
||||
// onto the average maneuver course; compare to the projected position actually reached at the time point of maximum speed after
|
||||
// maneuver:
|
||||
Position positionWhenSpeedStartedToDrop = track.getEstimatedPosition(timePointWhenSpeedStartedToDrop, /* extrapolate */ false);
|
||||
Position extrapolatedPositionAtTimePointOfMaxSpeedAfterManeuver =
|
||||
speedWhenSpeedStartedToDrop.travelTo(positionWhenSpeedStartedToDrop, timePointWhenSpeedStartedToDrop, timePointWhenSpeedLevelledOffAfterManeuver);
|
||||
Position actualPositionAtTimePointOfMaxSpeedAfterManeuver = track.getEstimatedPosition(timePointWhenSpeedLevelledOffAfterManeuver, /* extrapolate */ false);
|
||||
Position projectedExtrapolatedPositionAtTimePointOfMaxSpeedAfterManeuver =
|
||||
extrapolatedPositionAtTimePointOfMaxSpeedAfterManeuver.projectToLineThrough(positionWhenSpeedStartedToDrop, middleManeuverAngle);
|
||||
Position projectedActualPositionAtTimePointOfMaxSpeedAfterManeuver =
|
||||
actualPositionAtTimePointOfMaxSpeedAfterManeuver.projectToLineThrough(positionWhenSpeedStartedToDrop, middleManeuverAngle);
|
||||
result = projectedActualPositionAtTimePointOfMaxSpeedAfterManeuver.getDistance(projectedExtrapolatedPositionAtTimePointOfMaxSpeedAfterManeuver);
|
||||
} else {
|
||||
result = null;
|
||||
}
|
||||
} else {
|
||||
result = null;
|
||||
}
|
||||
@@ -641,7 +645,7 @@ public class TrackedLegOfCompetitorImpl implements TrackedLegOfCompetitor {
|
||||
while (fixIter.hasNext()) {
|
||||
fix = fixIter.next();
|
||||
final SpeedWithBearing estimatedSpeedAtFix = track.getEstimatedSpeed(fix.getTimePoint());
|
||||
if (lastFix != null) {
|
||||
if (lastFix != null && lastSpeed != null && lastLastSpeed != null && estimatedSpeedAtFix != null) {
|
||||
if (lastSpeed.compareTo(lastLastSpeed) > 0 && lastSpeed.compareTo(estimatedSpeedAtFix) > 0) {
|
||||
maxima.add(lastFix);
|
||||
} else if (lastSpeed.compareTo(lastLastSpeed) < 0 && lastSpeed.compareTo(estimatedSpeedAtFix) < 0) {
|
||||
|
||||
+14
-8
@@ -2259,14 +2259,20 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
||||
break;
|
||||
}
|
||||
if (lastFix != null) {
|
||||
Bearing courseAtLastFix = track.getEstimatedSpeed(lastFix.getTimePoint()).getBearing();
|
||||
Bearing courseAtFix = track.getEstimatedSpeed(fix.getTimePoint()).getBearing();
|
||||
double angleSpeedInDegreesPerSecond = Math.abs((courseAtFix.getDifferenceTo(courseAtLastFix)
|
||||
.getDegrees())
|
||||
/ (double) (fix.getTimePoint().asMillis() - lastFix.getTimePoint().asMillis()));
|
||||
if (angleSpeedInDegreesPerSecond > maxAngleSpeedInDegreesPerSecond) {
|
||||
maxAngleSpeedInDegreesPerSecond = angleSpeedInDegreesPerSecond;
|
||||
result = lastFix.getTimePoint();
|
||||
final SpeedWithBearing lastEstimatedSpeed = track.getEstimatedSpeed(lastFix.getTimePoint());
|
||||
if (lastEstimatedSpeed != null) {
|
||||
Bearing courseAtLastFix = lastEstimatedSpeed.getBearing();
|
||||
final SpeedWithBearing estimatedSpeed = track.getEstimatedSpeed(fix.getTimePoint());
|
||||
if (estimatedSpeed != null) {
|
||||
Bearing courseAtFix = estimatedSpeed.getBearing();
|
||||
double angleSpeedInDegreesPerSecond = Math.abs((courseAtFix
|
||||
.getDifferenceTo(courseAtLastFix).getDegrees())
|
||||
/ (double) (fix.getTimePoint().asMillis() - lastFix.getTimePoint().asMillis()));
|
||||
if (angleSpeedInDegreesPerSecond > maxAngleSpeedInDegreesPerSecond) {
|
||||
maxAngleSpeedInDegreesPerSecond = angleSpeedInDegreesPerSecond;
|
||||
result = lastFix.getTimePoint();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
lastFix = fix;
|
||||
|
||||
Reference in new issue
Block a user