Orbital neophyte here,
I am propagating from a PV pair time. Something about my propagation configuration produces a really strange path that looks like this, where the vector must emanate from the Earth’s center:
It’s a very simplistic program producing the ephemeris. The code puts the PV values in a file (output.txt) along with the index. The position vector just got up/down over and over, just like the picture shows.
How can that even happen?
Thank you for your time.
package com.leidos.smac.data.orbit;
import org.hipparchus.geometry.euclidean.threed.Vector3D;
import org.orekit.bodies.*;
import org.orekit.data.*;
import org.orekit.frames.*;
import org.orekit.orbits.*;
import org.orekit.propagation.*;
import org.orekit.propagation.analytical.KeplerianPropagator;
import org.orekit.propagation.analytical.tle.*;
import org.orekit.time.*;
import org.orekit.utils.*;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
public class Scratch
{
public static void main(String[] args) {
// Orekit setup data
File orekitData = new File("src/main/resources/orekit_data");
DataProvidersManager manager = DataContext.getDefault().getDataProvidersManager();
manager.addProvider(new DirectoryCrawler(orekitData));
try {
AbsoluteDate epoch = new AbsoluteDate(2023, 9, 27, 18, 0, 0.000000, TimeScalesFactory.getUTC());
double mu = 3.986004415e+14;
Frame inertialFrame = FramesFactory.getICRF();
PVCoordinates pvCoordinates = new PVCoordinates(
new Vector3D(5.3562909436536320e+06, 1.7374822680742762e+06, 2.9890671950189904e+06),
new Vector3D(-1.1435433282106951e+02, 3.9408793506464212e+02, 7.2068475671536287e+00)
);
CartesianOrbit initialOrbit = new CartesianOrbit(pvCoordinates, inertialFrame, epoch, mu);
KeplerianPropagator propagator = new KeplerianPropagator(initialOrbit);
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
for (int i = 0; i <= 31141; i++) {
AbsoluteDate targetDate = epoch.shiftedBy(i);
SpacecraftState state = propagator.propagate(targetDate);
PVCoordinates pv = state.getPVCoordinates();
writer.write(String.format("%.16e %.16e %.16e %.16e %.16e %.16e %.16e%n",
(double) i,
pv.getPosition().getX(),
pv.getPosition().getY(),
pv.getPosition().getZ(),
pv.getVelocity().getX(),
pv.getVelocity().getY(),
pv.getVelocity().getZ()));
}
} catch (IOException e) {
System.out.println("Error writing to file: " + e.getMessage());
}
System.out.println("Done." );
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}