From 76754e0a3406b56c2003eede8ad40b606ceecd55 Mon Sep 17 00:00:00 2001 From: Luc Maisonobe <luc@orekit.org> Date: Thu, 3 Sep 2015 17:30:07 +0200 Subject: [PATCH] =?UTF-8?q?Fixed=20an=20error=20with=20intersection=20impr?= =?UTF-8?q?ovement=20near=20180=C2=B0=20longitude.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../intersection/BasicScanAlgorithm.java | 22 ++++++++++++++----- .../duvenhage/DuvenhageAlgorithm.java | 21 +++++++++++++----- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java index 743b4491..7a6301d2 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 24e756b8..e2088e4f 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); -- GitLab