Merge branch 'master' into textbox

This commit is contained in:
Axel Uhl committed 2013-11-13 22:24:13 +01:00
commit ece5e747fa
2 files changed
+34 -24

No files matched your search

@@ -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) {
@@ -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;