diff --git a/src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java b/src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java index 96bf4d97620b52e80239cb805f44bc2a6d9133bd..7715ca6d23b1e0a40164d3bd1c86e4a1a910afae 100644 --- a/src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java +++ b/src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java @@ -419,12 +419,22 @@ public class SensorMeanPlaneCrossing { } if (FastMath.abs(deltaL) <= accuracy) { // return immediately, without doing any additional evaluation! - if (cachedResults.size() >= CACHED_RESULTS) { - cachedResults.remove(cachedResults.size() - 1); + final CrossingResult crossingResult = + new CrossingResult(sensor.getDate(crossingLine), crossingLine, target, + targetDirection[0], targetDirection[1]); + boolean isNew = true; + for (final CrossingResult existing : cachedResults) { + isNew = isNew && FastMath.abs(crossingLine - existing.crossingLine) > accuracy; } - cachedResults.add(0, new CrossingResult(sensor.getDate(crossingLine), crossingLine, target, - targetDirection[0], targetDirection[1])); - return cachedResults.get(0); + if (isNew) { + // this result is different from the existing ones, + // it brings new sampling data to the cache + if (cachedResults.size() >= CACHED_RESULTS) { + cachedResults.remove(cachedResults.size() - 1); + } + cachedResults.add(0, crossingResult); + } + return crossingResult; } for (int j = 0; j < i; ++j) { if (FastMath.abs(crossingLine - crossingLineHistory[j]) <= 1.0) {