diff --git a/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java index 743b4491adb8fb607298dc0abfd276aca946107e..7a6301d2eddd4230379201ba9663f12f8e86c6b3 100644 --- a/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java +++ b/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java @@ -136,7 +136,13 @@ public class BasicScanAlgorithm implements IntersectionAlgorithm { final double s = Vector3D.dotProduct(delta, los) / los.getNormSq(); final GeodeticPoint projected = ellipsoid.transform(new Vector3D(1, position, s, los), ellipsoid.getBodyFrame(), null); - final NormalizedGeodeticPoint gpImproved = tile.cellIntersection(projected, ellipsoid.convertLos(projected, los), i, j); + final NormalizedGeodeticPoint normalizedProjected = new NormalizedGeodeticPoint(projected.getLatitude(), + projected.getLongitude(), + projected.getAltitude(), + gp.getLongitude()); + final NormalizedGeodeticPoint gpImproved = tile.cellIntersection(normalizedProjected, + ellipsoid.convertLos(normalizedProjected, los), + i, j); if (gpImproved != null) { final Vector3D point = ellipsoid.transform(gpImproved); @@ -172,10 +178,16 @@ public class BasicScanAlgorithm implements IntersectionAlgorithm { final double s = Vector3D.dotProduct(delta, los) / los.getNormSq(); final GeodeticPoint projected = ellipsoid.transform(new Vector3D(1, position, s, los), ellipsoid.getBodyFrame(), null); - final Tile tile = cache.getTile(projected.getLatitude(), projected.getLongitude()); - return tile.cellIntersection(projected, ellipsoid.convertLos(projected, los), - tile.getFloorLatitudeIndex(projected.getLatitude()), - tile.getFloorLongitudeIndex(projected.getLongitude())); + final NormalizedGeodeticPoint normalizedProjected = new NormalizedGeodeticPoint(projected.getLatitude(), + projected.getLongitude(), + projected.getAltitude(), + closeGuess.getLongitude()); + final Tile tile = cache.getTile(normalizedProjected.getLatitude(), + normalizedProjected.getLongitude()); + return tile.cellIntersection(normalizedProjected, + ellipsoid.convertLos(normalizedProjected, los), + tile.getFloorLatitudeIndex(normalizedProjected.getLatitude()), + tile.getFloorLongitudeIndex(normalizedProjected.getLongitude())); } catch (OrekitException oe) { throw new RuggedException(oe, oe.getSpecifier(), oe.getParts()); } 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 24e756b8994f6d65553ef48c3737cc74d87777f9..e2088e4f8dd0815ff153275f3167a5f6ddb2b9cc 100644 --- a/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java +++ b/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java @@ -195,10 +195,15 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm { final double s = Vector3D.dotProduct(delta, los) / los.getNormSq(); final GeodeticPoint projected = ellipsoid.transform(new Vector3D(1, position, s, los), ellipsoid.getBodyFrame(), null); - final Tile tile = cache.getTile(projected.getLatitude(), projected.getLongitude()); - return tile.cellIntersection(projected, ellipsoid.convertLos(projected, los), - tile.getFloorLatitudeIndex(projected.getLatitude()), - tile.getFloorLongitudeIndex(projected.getLongitude())); + final NormalizedGeodeticPoint normalizedProjected = new NormalizedGeodeticPoint(projected.getLatitude(), + projected.getLongitude(), + projected.getAltitude(), + closeGuess.getLongitude()); + final Tile tile = cache.getTile(normalizedProjected.getLatitude(), + normalizedProjected.getLongitude()); + return tile.cellIntersection(normalizedProjected, ellipsoid.convertLos(normalizedProjected, los), + tile.getFloorLatitudeIndex(normalizedProjected.getLatitude()), + tile.getFloorLongitudeIndex(normalizedProjected.getLongitude())); } } catch (OrekitException oe) { throw new RuggedException(oe, oe.getSpecifier(), oe.getParts()); @@ -457,7 +462,13 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm { final double s = Vector3D.dotProduct(delta, los) / los.getNormSq(); final GeodeticPoint projected = ellipsoid.transform(new Vector3D(1, position, s, los), ellipsoid.getBodyFrame(), null); - final NormalizedGeodeticPoint gpImproved = tile.cellIntersection(projected, ellipsoid.convertLos(projected, los), i, j); + final NormalizedGeodeticPoint normalizedProjected = new NormalizedGeodeticPoint(projected.getLatitude(), + projected.getLongitude(), + projected.getAltitude(), + gp.getLongitude()); + final NormalizedGeodeticPoint gpImproved = tile.cellIntersection(normalizedProjected, + ellipsoid.convertLos(normalizedProjected, los), + i, j); if (gpImproved != null) { final Vector3D point = ellipsoid.transform(gpImproved);