mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-21 19:50:01 +00:00
Implemented and tested the new wind chart recalculation algorithm
This commit is contained in:
1 parent
f0daeec314
commit
f6b8f8c427
3 files changed
+45
-39
No files matched your search
+17
-21
@@ -9,28 +9,24 @@ public final class ChartPointRecalculator {
|
||||
public static Point stayClosestToPreviousPoint(Point previousPoint, Point newPoint) {
|
||||
double previousY = previousPoint.getY().doubleValue();
|
||||
double newY = newPoint.getY().doubleValue();
|
||||
|
||||
double deltaPreviousNew = Math.abs(previousY - newY);
|
||||
double deltaPreviosNewUp = Math.abs(previousY - (newY + 360));
|
||||
double deltaPreviosNewDown = Math.abs(previousY - (newY - 360));
|
||||
|
||||
if (isStrictlyLessThan(deltaPreviosNewUp, deltaPreviousNew, deltaPreviosNewDown)) {
|
||||
return new Point(newPoint.getX(), newPoint.getY().doubleValue() + 360);
|
||||
}
|
||||
if (isStrictlyLessThan(deltaPreviosNewDown, deltaPreviousNew, deltaPreviosNewUp)) {
|
||||
return new Point(newPoint.getX(), newPoint.getY().doubleValue() - 360);
|
||||
}
|
||||
|
||||
return newPoint;
|
||||
}
|
||||
|
||||
private static boolean isStrictlyLessThan(double valueToCheck, double... valuesToCompare) {
|
||||
for (double value : valuesToCompare) {
|
||||
if (value <= valueToCheck) {
|
||||
return false;
|
||||
|
||||
double bestNewY = newY;
|
||||
boolean hasBeenMoved;
|
||||
do {
|
||||
hasBeenMoved = false;
|
||||
double deltaPreviousYToNewY = Math.abs(previousY - bestNewY);
|
||||
double deltaPreviousYToNewYUp = Math.abs(previousY - (bestNewY + 360));
|
||||
double deltaPreviousYToNewYDown = Math.abs(previousY - (bestNewY - 360));
|
||||
|
||||
if (deltaPreviousYToNewYUp < deltaPreviousYToNewY ||
|
||||
deltaPreviousYToNewYDown < deltaPreviousYToNewY) {
|
||||
bestNewY = deltaPreviousYToNewYUp <= deltaPreviousYToNewYDown ?
|
||||
bestNewY + 360 : bestNewY - 360;
|
||||
hasBeenMoved = true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
} while (hasBeenMoved);
|
||||
|
||||
return new Point(newPoint.getX(), bestNewY);
|
||||
}
|
||||
|
||||
public static Point keepOverallDeltaMinimal(Double yMin, Double yMax, Point newPoint) {
|
||||
|
||||
Reference in new issue
Block a user