private void getSensorPosition(final double time, double[] senPos) { final int numVectors = orbitStateVectors.length; final int numVectorsUsed = Math.min(orbitStateVectors.length, 5); final int d = numVectors / numVectorsUsed; final double[] timeArray = new double[numVectorsUsed]; final double[] xPosArray = new double[numVectorsUsed]; final double[] yPosArray = new double[numVectorsUsed]; final double[] zPosArray = new double[numVectorsUsed]; for (int i = 0; i < numVectorsUsed; i++) { timeArray[i] = orbitStateVectors[i * d].time_mjd; xPosArray[i] = orbitStateVectors[i * d].x_pos; // m yPosArray[i] = orbitStateVectors[i * d].y_pos; // m zPosArray[i] = orbitStateVectors[i * d].z_pos; // m } senPos[0] = Maths.lagrangeInterpolatingPolynomial(timeArray, xPosArray, time); senPos[1] = Maths.lagrangeInterpolatingPolynomial(timeArray, yPosArray, time); senPos[2] = Maths.lagrangeInterpolatingPolynomial(timeArray, zPosArray, time); }
/** * Get orbit information for given time. * * @param utc The UTC in days. * @param timeArray Array holding zeros Doppler times for all state vectors. * @param xPosArray Array holding x coordinates for sensor positions in all state vectors. * @param yPosArray Array holding y coordinates for sensor positions in all state vectors. * @param zPosArray Array holding z coordinates for sensor positions in all state vectors. * @param xVelArray Array holding x velocities for sensor positions in all state vectors. * @param yVelArray Array holding y velocities for sensor positions in all state vectors. * @param zVelArray Array holding z velocities for sensor positions in all state vectors. * @return The orbit information. */ private static Orbits.OrbitVector getOrbitData(final double utc, final double[] timeArray, final double[] xPosArray, final double[] yPosArray, final double[] zPosArray, final double[] xVelArray, final double[] yVelArray, final double[] zVelArray) { // Lagrange polynomial interpolation return new Orbits.OrbitVector(utc, Maths.lagrangeInterpolatingPolynomial(timeArray, xPosArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, yPosArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, zPosArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, xVelArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, yVelArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, zVelArray, utc)); }
/** * Get orbit information for given time. * * @param utc The UTC in days. * @param timeArray Array holding zeros Doppler times for all state vectors. * @param xPosArray Array holding x coordinates for sensor positions in all state vectors. * @param yPosArray Array holding y coordinates for sensor positions in all state vectors. * @param zPosArray Array holding z coordinates for sensor positions in all state vectors. * @param xVelArray Array holding x velocities for sensor positions in all state vectors. * @param yVelArray Array holding y velocities for sensor positions in all state vectors. * @param zVelArray Array holding z velocities for sensor positions in all state vectors. * @return The orbit information. */ private static Orbits.OrbitVector getOrbitData(final double utc, final double[] timeArray, final double[] xPosArray, final double[] yPosArray, final double[] zPosArray, final double[] xVelArray, final double[] yVelArray, final double[] zVelArray) { // Lagrange polynomial interpolation return new Orbits.OrbitVector(utc, Maths.lagrangeInterpolatingPolynomial(timeArray, xPosArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, yPosArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, zPosArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, xVelArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, yVelArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, zVelArray, utc)); } }
/** * Get orbit information for given time. * * @param utc The UTC in days. * @param timeArray Array holding zeros Doppler times for all state vectors. * @param xPosArray Array holding x coordinates for sensor positions in all state vectors. * @param yPosArray Array holding y coordinates for sensor positions in all state vectors. * @param zPosArray Array holding z coordinates for sensor positions in all state vectors. * @param xVelArray Array holding x velocities for sensor positions in all state vectors. * @param yVelArray Array holding y velocities for sensor positions in all state vectors. * @param zVelArray Array holding z velocities for sensor positions in all state vectors. * @return The orbit information. */ private static Orbits.OrbitVector getOrbitData(final double utc, final double[] timeArray, final double[] xPosArray, final double[] yPosArray, final double[] zPosArray, final double[] xVelArray, final double[] yVelArray, final double[] zVelArray) { // Lagrange polynomial interpolation return new Orbits.OrbitVector(utc, Maths.lagrangeInterpolatingPolynomial(timeArray, xPosArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, yPosArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, zPosArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, xVelArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, yVelArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, zVelArray, utc)); } }
/** * Get orbit information for given time. * * @param utc The UTC in days. * @param timeArray Array holding zeros Doppler times for all state vectors. * @param xPosArray Array holding x coordinates for sensor positions in all state vectors. * @param yPosArray Array holding y coordinates for sensor positions in all state vectors. * @param zPosArray Array holding z coordinates for sensor positions in all state vectors. * @param xVelArray Array holding x velocities for sensor positions in all state vectors. * @param yVelArray Array holding y velocities for sensor positions in all state vectors. * @param zVelArray Array holding z velocities for sensor positions in all state vectors. * @return The orbit information. */ private static Orbits.OrbitVector getOrbitData(final double utc, final double[] timeArray, final double[] xPosArray, final double[] yPosArray, final double[] zPosArray, final double[] xVelArray, final double[] yVelArray, final double[] zVelArray) { // Lagrange polynomial interpolation return new Orbits.OrbitVector(utc, Maths.lagrangeInterpolatingPolynomial(timeArray, xPosArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, yPosArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, zPosArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, xVelArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, yVelArray, utc), Maths.lagrangeInterpolatingPolynomial(timeArray, zVelArray, utc)); } }