From eb927f889781d3b071da89883d3c06bd64704bd5 Mon Sep 17 00:00:00 2001 From: Jonathan Guinet <jonathan.guinet@c-s.fr> Date: Fri, 18 Nov 2016 10:53:16 -0500 Subject: [PATCH] =?UTF-8?q?ajout=20los=20interpol=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../orekit/rugged/linesensor/LineSensor.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/main/java/org/orekit/rugged/linesensor/LineSensor.java b/src/main/java/org/orekit/rugged/linesensor/LineSensor.java index d7b90ec5..9ecd9757 100644 --- a/src/main/java/org/orekit/rugged/linesensor/LineSensor.java +++ b/src/main/java/org/orekit/rugged/linesensor/LineSensor.java @@ -21,12 +21,14 @@ import java.util.stream.Stream; import org.hipparchus.analysis.differentiation.DerivativeStructure; import org.hipparchus.geometry.euclidean.threed.FieldVector3D; import org.hipparchus.geometry.euclidean.threed.Vector3D; +import org.hipparchus.util.FastMath; import org.orekit.rugged.errors.DumpManager; import org.orekit.rugged.errors.RuggedException; import org.orekit.rugged.los.TimeDependentLOS; import org.orekit.rugged.utils.DSGenerator; import org.orekit.time.AbsoluteDate; import org.orekit.utils.ParameterDriver; +import org.s2geolib.exception.S2GeolibException; /** Line sensor model. * @author Luc Maisonobe @@ -97,6 +99,22 @@ public class LineSensor { return l; } + /** Get the pixel normalized interpolated line-of-sight at some date. + * @param date current date + * @param i pixel index (must be between 0 and {@link #getNbPixels()} - 1 + * @return pixel normalized line-of-sight + * @exception RuggedException if date cannot be handled + */ + public Vector3D getLOS(final AbsoluteDate date, final double i) + throws RuggedException { + + final int iInf = FastMath.max(0, FastMath.min(getNbPixels() - 2, (int) FastMath.floor(i))); + final int iSup = iInf + 1; + final Vector3D interpolatedLos = new Vector3D(iSup - i,los.getLOS(iInf, date), + i - iInf, los.getLOS(iSup, date)); + return interpolatedLos; + } + /** Get the pixel normalized line-of-sight at some date, * and their derivatives with respect to estimated parameters. * @param date current date @@ -108,6 +126,29 @@ public class LineSensor { final DSGenerator generator) { return los.getLOSDerivatives(i, date, generator); } + + + /** Get the pixel normalized line-of-sight at some date, + * and their derivatives with respect to estimated parameters. + * @param date current date + * @param i pixel index (must be between 0 and {@link #getNbPixels()} - 1 + * @param generator generator to use for building {@link DerivativeStructure} instances + * @return pixel normalized line-of-sight + */ + public FieldVector3D<DerivativeStructure> getLOSDerivatives(final AbsoluteDate date, final double i, + final DSGenerator generator) { + + // find surrounding pixels of pixelB (in order to interpolate LOS from pixelB (that is not an integer) + final int iInf = FastMath.max(0, FastMath.min(getNbPixels() - 2, (int) FastMath.floor(i))); + final int iSup = iInf + 1; + + FieldVector3D<DerivativeStructure> interpolatedLos = new FieldVector3D<DerivativeStructure> ( + iSup - i, + los.getLOSDerivatives(iInf, date, generator), + i - iInf, + los.getLOSDerivatives(iSup, date, generator)).normalize(); + return interpolatedLos; + } /** Get the date. * @param lineNumber line number -- GitLab