diff --git a/src/main/java/org/orekit/rugged/api/Rugged.java b/src/main/java/org/orekit/rugged/api/Rugged.java index 51bddcd3c93588ea0d636a8729f46ba525025242..8d79f3cf947cb2d38340a80c59a8d8bb8a57b1c4 100644 --- a/src/main/java/org/orekit/rugged/api/Rugged.java +++ b/src/main/java/org/orekit/rugged/api/Rugged.java @@ -63,7 +63,7 @@ import org.orekit.utils.PVCoordinatesProvider; public class Rugged { /** Absolute accuracy to use for inverse localization. */ - private static final double INVERSE_LOCALIZATION_ACCURACY = 1.0e-4; + private static final double INVERSE_LOCALIZATION_ACCURACY = 1.0e-8; /** Maximum number of evaluations for inverse localization. */ private static final int INVERSE_LOCALIZATION_MAX_EVAL = 1000; @@ -591,7 +591,7 @@ public class Rugged { checkContext(); final Sensor sensor = getSensor(sensorName); final Vector3D target = ellipsoid.transform(groundPoint); - final UnivariateSolver solver = new BracketingNthOrderBrentSolver(INVERSE_LOCALIZATION_ACCURACY, 5); + final UnivariateSolver solver = new BracketingNthOrderBrentSolver(0.0, INVERSE_LOCALIZATION_ACCURACY, 5); // find the line at which ground point crosses sensor mean plane final SensorMeanPlaneCrossing planeCrossing = new SensorMeanPlaneCrossing(sensor, target); @@ -642,7 +642,7 @@ public class Rugged { @Override public double value(final double lineNumber) throws OrekitExceptionWrapper { // the target crosses the mean plane if it orthogonal to the normal vector - return Vector3D.dotProduct(targetDirection(lineNumber), sensor.getMeanPlaneNormal()); + return Vector3D.angle(targetDirection(lineNumber), sensor.getMeanPlaneNormal()) - 0.5 * FastMath.PI; } /** Compute target point direction in spacecraft frame, at line acquisition time. @@ -716,7 +716,7 @@ public class Rugged { /** {@inheritDoc} */ @Override public double value(final double x) { - return Vector3D.dotProduct(cross, getLOS(x)); + return Vector3D.angle(cross, getLOS(x)) - 0.5 * FastMath.PI; } /** Interpolate sensor pixels at some pixel index. diff --git a/src/test/java/org/orekit/rugged/api/RuggedTest.java b/src/test/java/org/orekit/rugged/api/RuggedTest.java index abf3b3a1cbe20f262d9f5db40d1e20ffeb5d8793..426738f105b0f47d4c04db0f9fde2d78790ac3d1 100644 --- a/src/test/java/org/orekit/rugged/api/RuggedTest.java +++ b/src/test/java/org/orekit/rugged/api/RuggedTest.java @@ -63,6 +63,8 @@ import org.orekit.propagation.SpacecraftState; import org.orekit.propagation.analytical.KeplerianPropagator; import org.orekit.propagation.numerical.NumericalPropagator; import org.orekit.rugged.core.raster.RandomLandscapeUpdater; +import org.orekit.rugged.core.raster.SimpleTileFactory; +import org.orekit.rugged.core.raster.Tile; import org.orekit.rugged.core.raster.VolcanicConeElevationUpdater; import org.orekit.time.AbsoluteDate; import org.orekit.time.TimeScalesFactory; @@ -499,16 +501,18 @@ public class RuggedTest { InertialFrameId.EME2000, BodyRotatingFrameId.ITRF, ephemeris); + rugged.setLightTimeCorrection(false); + rugged.setAberrationOfLightCorrection(false); rugged.setLineSensor("line", los, lineDatation); - GeodeticPoint[] gp = rugged.directLocalization("line", 100.24); - - GeodeticPoint target = - new GeodeticPoint(0.75 * gp[17].getLatitude() + 0.25 * gp[18].getLatitude(), - 0.75 * gp[17].getLongitude() + 0.25 * gp[18].getLongitude(), - 0.75 * gp[17].getAltitude() + 0.25 * gp[18].getAltitude()); - SensorPixel sp = rugged.inverseLocalization("line", target, 0.0, 200.0); - Assert.assertEquals(100.24, sp.getLineNumber(), 1.0e-10); - Assert.assertEquals( 17.25, sp.getPixelNumber(), 1.0e-10); + + double referenceLine = 100.00; + GeodeticPoint[] gp = rugged.directLocalization("line", referenceLine); + + for (int i = 1; i < gp.length; ++i) { + SensorPixel sp = rugged.inverseLocalization("line", gp[i], 0, dimension); + Assert.assertEquals(referenceLine, sp.getLineNumber(), 3.0e-9); + Assert.assertEquals(i, sp.getPixelNumber(), 8.0e-5); + } }