diff --git a/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java index 2bb58d4f0aa0b7b5ab7d5691c47cd3fedc1bec8e..474dd5f33b4a7240e19115ce41f019898a6e80ed 100644 --- a/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java +++ b/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java @@ -246,9 +246,10 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm { return null; } - NormalizedGeodeticPoint previousGP = entry; - int previousLat = entryLat; - int previousLon = entryLon; + NormalizedGeodeticPoint previousGP = entry; + int previousLat = entryLat; + int previousLon = entryLon; + final double angularMargin = STEP / ellipsoid.getEquatorialRadius(); // introduce all intermediate points corresponding to the line-of-sight // intersecting the boundary between level 0 sub-tiles @@ -260,8 +261,8 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm { // compute segment endpoints final double longitude = tile.getLongitudeAtIndex(crossingLon); - if (longitude >= FastMath.min(entry.getLongitude(), exit.getLongitude()) && - longitude <= FastMath.max(entry.getLongitude(), exit.getLongitude())) { + if (longitude >= FastMath.min(entry.getLongitude(), exit.getLongitude()) - angularMargin && + longitude <= FastMath.max(entry.getLongitude(), exit.getLongitude()) + angularMargin) { NormalizedGeodeticPoint crossingGP = null; if (!flatBody) { @@ -317,8 +318,8 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm { // compute segment endpoints final double latitude = tile.getLatitudeAtIndex(crossingLat); - if (latitude >= FastMath.min(entry.getLatitude(), exit.getLatitude()) && - latitude <= FastMath.max(entry.getLatitude(), exit.getLatitude())) { + if (latitude >= FastMath.min(entry.getLatitude(), exit.getLatitude()) - angularMargin && + latitude <= FastMath.max(entry.getLatitude(), exit.getLatitude()) + angularMargin) { NormalizedGeodeticPoint crossingGP = null; if (!flatBody) {