diff --git a/core/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java b/core/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java index 2d1b03cdb952da3fecde1b1905ca0d11b4aaa457..ac359e18104440393675b71133d775f8e9103b77 100644 --- a/core/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java +++ b/core/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java @@ -18,6 +18,7 @@ package org.orekit.rugged.intersection.duvenhage; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import org.apache.commons.math3.util.FastMath; +import org.apache.commons.math3.util.MathUtils; import org.orekit.bodies.GeodeticPoint; import org.orekit.errors.OrekitException; import org.orekit.rugged.api.RuggedException; @@ -384,7 +385,11 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm { final Vector3D exitP = ellipsoid.pointAtAltitude(position, los, tile.getMinElevation() - STEP); final GeodeticPoint exitGP = ellipsoid.transform(exitP, ellipsoid.getBodyFrame(), null); - switch (tile.getLocation(exitGP.getLatitude(), exitGP.getLongitude())) { + // fix longitude discontinuity + final double meanTileLongitude = tile.getLongitudeAtIndex(tile.getLongitudeColumns() / 2); + final double fixedLongitude = MathUtils.normalizeAngle(exitGP.getLongitude(), meanTileLongitude); + + switch (tile.getLocation(exitGP.getLatitude(), fixedLongitude)) { case SOUTH_WEST : return new LimitPoint(ellipsoid, selectClosest(ellipsoid.pointAtLatitude(position, los, tile.getMinimumLatitude(), exitP),