diff --git a/core/src/main/java/org/orekit/rugged/api/Rugged.java b/core/src/main/java/org/orekit/rugged/api/Rugged.java index d3ca2b350d7c282289475d07e7090cdca6ffe8dd..e617532f1af58f6ce15594f2aadbeec98415cadf 100644 --- a/core/src/main/java/org/orekit/rugged/api/Rugged.java +++ b/core/src/main/java/org/orekit/rugged/api/Rugged.java @@ -69,9 +69,6 @@ public class Rugged { /** Maximum number of evaluations. */ private static final int MAX_EVAL = 50; - /** Time step for frames transforms interpolations. */ - private static final double FRAMES_TRANSFORMS_INTERPOLATION_STEP = 0.001; - /** Reference ellipsoid. */ private final ExtendedEllipsoid ellipsoid; @@ -117,6 +114,7 @@ public class Rugged { * @param quaternions satellite quaternions * @param aInterpolationNumber number of points to use for attitude interpolation * @param aFilter filter for derivatives from the sample to use in attitude interpolation + * @param tStep step to use for inertial frame to body frame transforms cache computations * @exception RuggedException if data needed for some frame cannot be loaded or if position * or attitude samples do not fully cover the [{@code minDate}, {@code maxDate}] search time span */ @@ -127,13 +125,13 @@ public class Rugged { final List<TimeStampedPVCoordinates> positionsVelocities, final int pvInterpolationNumber, final CartesianDerivativesFilter pvFilter, final List<TimeStampedAngularCoordinates> quaternions, final int aInterpolationNumber, - final AngularDerivativesFilter aFilter) + final AngularDerivativesFilter aFilter, final double tStep) throws RuggedException { this(updater, maxCachedTiles, algorithmID, selectEllipsoid(ellipsoidID, selectBodyRotatingFrame(bodyRotatingFrameID)), selectInertialFrame(inertialFrameID), minDate, maxDate, overshootTolerance, positionsVelocities, pvInterpolationNumber, pvFilter, - quaternions, aInterpolationNumber, aFilter); + quaternions, aInterpolationNumber, aFilter, tStep); } /** Build a configured instance. @@ -159,6 +157,7 @@ public class Rugged { * @param quaternions satellite quaternions * @param aInterpolationNumber number of points to use for attitude interpolation * @param aFilter filter for derivatives from the sample to use in attitude interpolation + * @param tStep step to use for inertial frame to body frame transforms cache computations * @exception RuggedException if data needed for some frame cannot be loaded or if position * or attitude samples do not fully cover the [{@code minDate}, {@code maxDate}] search time span */ @@ -168,7 +167,7 @@ public class Rugged { final List<TimeStampedPVCoordinates> positionsVelocities, final int pvInterpolationNumber, final CartesianDerivativesFilter pvFilter, final List<TimeStampedAngularCoordinates> quaternions, final int aInterpolationNumber, - final AngularDerivativesFilter aFilter) + final AngularDerivativesFilter aFilter, final double tStep) throws RuggedException { // space reference @@ -179,7 +178,7 @@ public class Rugged { minDate, maxDate, overshootTolerance, positionsVelocities, pvInterpolationNumber, pvFilter, quaternions, aInterpolationNumber, aFilter, - FRAMES_TRANSFORMS_INTERPOLATION_STEP); + tStep); // intersection algorithm this.algorithm = selectAlgorithm(algorithmID, updater, maxCachedTiles); @@ -214,6 +213,7 @@ public class Rugged { * @param interpolationNumber number of points to use for inertial/Earth/spacraft transforms interpolations * @param pvFilter filter for derivatives from the sample to use in position/velocity interpolation * @param aFilter filter for derivatives from the sample to use in attitude interpolation + * @param tStep step to use for inertial frame to body frame transforms cache computations * @param propagator global propagator * @exception RuggedException if data needed for some frame cannot be loaded */ @@ -223,12 +223,12 @@ public class Rugged { final AbsoluteDate minDate, final AbsoluteDate maxDate, final double overshootTolerance, final double interpolationStep, final int interpolationNumber, final CartesianDerivativesFilter pvFilter, final AngularDerivativesFilter aFilter, - final Propagator propagator) + final double tStep, final Propagator propagator) throws RuggedException { this(updater, maxCachedTiles, algorithmID, selectEllipsoid(ellipsoidID, selectBodyRotatingFrame(bodyRotatingFrameID)), selectInertialFrame(inertialFrameID), minDate, maxDate, overshootTolerance, - interpolationStep, interpolationNumber, pvFilter, aFilter, propagator); + interpolationStep, interpolationNumber, pvFilter, aFilter, tStep, propagator); } /** Build a configured instance. @@ -252,6 +252,7 @@ public class Rugged { * @param interpolationNumber number of points of to use for inertial/Earth/spacraft transforms interpolations * @param pvFilter filter for derivatives from the sample to use in position/velocity interpolation * @param aFilter filter for derivatives from the sample to use in attitude interpolation + * @param tStep step to use for inertial frame to body frame transforms cache computations * @param propagator global propagator * @exception RuggedException if data needed for some frame cannot be loaded */ @@ -260,7 +261,7 @@ public class Rugged { final AbsoluteDate minDate, final AbsoluteDate maxDate, final double overshootTolerance, final double interpolationStep, final int interpolationNumber, final CartesianDerivativesFilter pvFilter, final AngularDerivativesFilter aFilter, - final Propagator propagator) + final double tStep, final Propagator propagator) throws RuggedException { try { @@ -302,7 +303,7 @@ public class Rugged { minDate, maxDate, overshootTolerance, positionsVelocities, interpolationNumber, pvFilter, quaternions, interpolationNumber, aFilter, - FRAMES_TRANSFORMS_INTERPOLATION_STEP); + tStep); // intersection algorithm this.algorithm = selectAlgorithm(algorithmID, updater, maxCachedTiles); diff --git a/core/src/test/java/org/orekit/rugged/api/RuggedTest.java b/core/src/test/java/org/orekit/rugged/api/RuggedTest.java index c5eaea235f9a26bc7ce72a547326e2ef9e1040e6..bcfc5401645ca1f5c082952f5daade44e1401963 100644 --- a/core/src/test/java/org/orekit/rugged/api/RuggedTest.java +++ b/core/src/test/java/org/orekit/rugged/api/RuggedTest.java @@ -146,7 +146,7 @@ public class RuggedTest { Rugged rugged = new Rugged(updater, 8, AlgorithmId.DUVENHAGE, EllipsoidId.WGS84, InertialFrameId.EME2000, BodyRotatingFrameId.ITRF, pv.get(0).getDate(), pv.get(pv.size() - 1).getDate(), 5.0, - pv, 8, CartesianDerivativesFilter.USE_PV, q, 8, AngularDerivativesFilter.USE_R); + pv, 8, CartesianDerivativesFilter.USE_PV, q, 8, AngularDerivativesFilter.USE_R, 0.001); Assert.assertTrue(rugged.isLightTimeCorrected()); rugged.setLightTimeCorrection(false); @@ -176,7 +176,7 @@ public class RuggedTest { Rugged rugged = new Rugged(updater, 8, AlgorithmId.DUVENHAGE, EllipsoidId.WGS84, InertialFrameId.EME2000, BodyRotatingFrameId.ITRF, orbit.getDate().shiftedBy(-10.0), orbit.getDate().shiftedBy(+10.0), 5.0, - 1.0, 8, CartesianDerivativesFilter.USE_PV, AngularDerivativesFilter.USE_R, propagator); + 1.0, 8, CartesianDerivativesFilter.USE_PV, AngularDerivativesFilter.USE_R, 0.001, propagator); Assert.assertTrue(rugged.isLightTimeCorrected()); rugged.setLightTimeCorrection(false); @@ -223,12 +223,12 @@ public class RuggedTest { Assert.assertNotNull(new Rugged(updater, 8, AlgorithmId.DUVENHAGE, EllipsoidId.WGS84, InertialFrameId.EME2000, BodyRotatingFrameId.ITRF, t0.shiftedBy(4), t0.shiftedBy(6), 5.0, - pv, 2,CartesianDerivativesFilter.USE_PV, q, 2, AngularDerivativesFilter.USE_R)); + pv, 2,CartesianDerivativesFilter.USE_PV, q, 2, AngularDerivativesFilter.USE_R, 0.001)); try { new Rugged(updater, 8, AlgorithmId.DUVENHAGE, EllipsoidId.WGS84, InertialFrameId.EME2000, BodyRotatingFrameId.ITRF, t0.shiftedBy(-1), t0.shiftedBy(6), 0.0001, - pv, 2, CartesianDerivativesFilter.USE_PV, q, 2, AngularDerivativesFilter.USE_R); + pv, 2, CartesianDerivativesFilter.USE_PV, q, 2, AngularDerivativesFilter.USE_R, 0.001); } catch (RuggedException re) { Assert.assertEquals(RuggedMessages.OUT_OF_TIME_RANGE, re.getSpecifier()); Assert.assertEquals(t0.shiftedBy(-1), re.getParts()[0]); @@ -238,7 +238,7 @@ public class RuggedTest { new Rugged(updater, 8, AlgorithmId.DUVENHAGE, EllipsoidId.WGS84, InertialFrameId.EME2000, BodyRotatingFrameId.ITRF, t0.shiftedBy(2), t0.shiftedBy(6), 0.0001, - pv, 2, CartesianDerivativesFilter.USE_PV, q, 2, AngularDerivativesFilter.USE_R); + pv, 2, CartesianDerivativesFilter.USE_PV, q, 2, AngularDerivativesFilter.USE_R, 0.001); } catch (RuggedException re) { Assert.assertEquals(RuggedMessages.OUT_OF_TIME_RANGE, re.getSpecifier()); Assert.assertEquals(t0.shiftedBy(2), re.getParts()[0]); @@ -248,7 +248,7 @@ public class RuggedTest { new Rugged(updater, 8, AlgorithmId.DUVENHAGE, EllipsoidId.WGS84, InertialFrameId.EME2000, BodyRotatingFrameId.ITRF, t0.shiftedBy(4), t0.shiftedBy(9), 0.0001, - pv, 2, CartesianDerivativesFilter.USE_PV, q, 2, AngularDerivativesFilter.USE_R); + pv, 2, CartesianDerivativesFilter.USE_PV, q, 2, AngularDerivativesFilter.USE_R, 0.001); } catch (RuggedException re) { Assert.assertEquals(RuggedMessages.OUT_OF_TIME_RANGE, re.getSpecifier()); Assert.assertEquals(t0.shiftedBy(9), re.getParts()[0]); @@ -258,7 +258,7 @@ public class RuggedTest { new Rugged(updater, 8, AlgorithmId.DUVENHAGE, EllipsoidId.WGS84, InertialFrameId.EME2000, BodyRotatingFrameId.ITRF, t0.shiftedBy(4), t0.shiftedBy(12), 0.0001, - pv, 2, CartesianDerivativesFilter.USE_PV, q, 2, AngularDerivativesFilter.USE_R); + pv, 2, CartesianDerivativesFilter.USE_PV, q, 2, AngularDerivativesFilter.USE_R, 0.001); } catch (RuggedException re) { Assert.assertEquals(RuggedMessages.OUT_OF_TIME_RANGE, re.getSpecifier()); Assert.assertEquals(t0.shiftedBy(12), re.getParts()[0]); @@ -315,7 +315,7 @@ public class RuggedTest { lineDatation.getDate(firstLine), lineDatation.getDate(lastLine), 5.0, 1.0 / lineDatation.getRate(0.0), 8, CartesianDerivativesFilter.USE_PV, AngularDerivativesFilter.USE_R, - ephemeris); + 0.001, ephemeris); rugged.setLightTimeCorrection(true); rugged.setAberrationOfLightCorrection(true); @@ -393,7 +393,7 @@ public class RuggedTest { orbitToPV(orbit, earth, minDate.shiftedBy(-1.0), maxDate.shiftedBy(+1.0), 0.25), 8, CartesianDerivativesFilter.USE_PV, orbitToQ(orbit, earth, minDate.shiftedBy(-1.0), maxDate.shiftedBy(+1.0), 0.25), 2, - AngularDerivativesFilter.USE_R); + AngularDerivativesFilter.USE_R, 0.001); rugged.addLineSensor(lineSensor); @@ -448,7 +448,7 @@ public class RuggedTest { orbitToPV(orbit, earth, minDate.shiftedBy(-1.0), maxDate.shiftedBy(+1.0), 0.25), 8, CartesianDerivativesFilter.USE_PV, orbitToQ(orbit, earth, minDate.shiftedBy(-1.0), maxDate.shiftedBy(+1.0), 0.25), 2, - AngularDerivativesFilter.USE_R); + AngularDerivativesFilter.USE_R, 0.001); rugged.addLineSensor(lineSensor); @@ -508,7 +508,7 @@ public class RuggedTest { orbitToPV(orbit, earth, minDate.shiftedBy(-1.0), maxDate.shiftedBy(+1.0), 0.25), 8, CartesianDerivativesFilter.USE_PV, orbitToQ(orbit, earth, minDate.shiftedBy(-1.0), maxDate.shiftedBy(+1.0), 0.25), 2, - AngularDerivativesFilter.USE_R); + AngularDerivativesFilter.USE_R, 0.001); ruggedFull.addLineSensor(lineSensor); GeodeticPoint[] gpWithFlatBodyCorrection = ruggedFull.directLocalization("line", 100); @@ -518,7 +518,7 @@ public class RuggedTest { orbitToPV(orbit, earth, minDate.shiftedBy(-1.0), maxDate.shiftedBy(+1.0), 0.25), 8, CartesianDerivativesFilter.USE_PV, orbitToQ(orbit, earth, minDate.shiftedBy(-1.0), maxDate.shiftedBy(+1.0), 0.25), 2, - AngularDerivativesFilter.USE_R); + AngularDerivativesFilter.USE_R, 0.001); ruggedFlat.addLineSensor(lineSensor); GeodeticPoint[] gpWithoutFlatBodyCorrection = ruggedFlat.directLocalization("line", 100); @@ -583,7 +583,7 @@ public class RuggedTest { orbitToPV(orbit, earth, minDate.shiftedBy(-1.0), maxDate.shiftedBy(+1.0), 0.25), 8, CartesianDerivativesFilter.USE_PV, orbitToQ(orbit, earth, minDate.shiftedBy(-1.0), maxDate.shiftedBy(+1.0), 0.25), 2, - AngularDerivativesFilter.USE_R); + AngularDerivativesFilter.USE_R, 0.001); rugged.setLightTimeCorrection(true); rugged.setAberrationOfLightCorrection(true); for (LineSensor lineSensor : sensors) { @@ -692,7 +692,7 @@ public class RuggedTest { AlgorithmId.DUVENHAGE, EllipsoidId.WGS84, InertialFrameId.EME2000, BodyRotatingFrameId.ITRF, satellitePVList.get(0).getDate(), satellitePVList.get(satellitePVList.size() - 1).getDate(), 5.0, satellitePVList, 8, CartesianDerivativesFilter.USE_PV, - satelliteQList, 8, AngularDerivativesFilter.USE_R); + satelliteQList, 8, AngularDerivativesFilter.USE_R, 0.001); List<Vector3D> lineOfSight = new ArrayList<Vector3D>(); lineOfSight.add(new Vector3D(-0.011204, 0.181530, 1d).normalize()); @@ -847,7 +847,7 @@ public class RuggedTest { orbitToPV(orbit, earth, minDate.shiftedBy(-1.0), maxDate.shiftedBy(+1.0), 0.25), 8, CartesianDerivativesFilter.USE_PV, orbitToQ(orbit, earth, minDate.shiftedBy(-1.0), maxDate.shiftedBy(+1.0), 0.25), 2, - AngularDerivativesFilter.USE_R); + AngularDerivativesFilter.USE_R, 0.001); rugged.setLightTimeCorrection(lightTimeCorrection); rugged.setAberrationOfLightCorrection(aberrationOfLightCorrection); rugged.addLineSensor(lineSensor); diff --git a/src/site/xdoc/changes.xml b/src/site/xdoc/changes.xml index f4616564ebc1067ec2a0be93ec57c52df6aaa3f0..5b656467f907c1332338b9326cff0b6ce080740a 100644 --- a/src/site/xdoc/changes.xml +++ b/src/site/xdoc/changes.xml @@ -22,8 +22,11 @@ <body> <release version="1.0" date="TBD" description="TBD"> + <action dev="luc" type="add"> + Time step for internal transform caching is now user-configurable. + </action> <action dev="luc" type="update"> - Swtiched maven configuration to multi-modules. + Switched maven configuration to multi-modules. </action> <action dev="luc" type="update"> Updated UML diagrams.