import org.hipparchus.ode.events.Action; import org.orekit.orbits.KeplerianOrbit; import org.orekit.propagation.SpacecraftState; import org.orekit.propagation.events.ApsideDetector; import org.orekit.propagation.events.handlers.EventHandler; import org.orekit.time.AbsoluteDate; public class ApsideCounterOrekit implements EventHandler { private int apogeeCount; private int perigeeCount; public ApsideCounterOrekit() { super(); } @Override public void init(SpacecraftState initialState, AbsoluteDate target) { apogeeCount = (int) initialState.getAdditionalState("ApsideNumber")[0]; perigeeCount = (int) initialState.getAdditionalState("ApsideNumber")[1]; } @Override public Action eventOccurred(SpacecraftState s, ApsideDetector detector, boolean increasing) { if (increasing) { if (detector.isForward()) { perigeeCount = perigeeCount + 1; } else { perigeeCount = perigeeCount - 1; } } else { if (detector.isForward()) { apogeeCount = apogeeCount + 1; } else { apogeeCount = apogeeCount - 1; } System.out.println("Apogee detected, mean ano is" + new KeplerianOrbit(s.getOrbit()).getMeanAnomaly() + " rad at orbit #" + apogeeCount); } return Action.RESET_STATE; } @Override public SpacecraftState resetState(ApsideDetector detector, SpacecraftState oldState) { double[] apsideCounters = new double[2]; apsideCounters[0] = apogeeCount; apsideCounters[1] = perigeeCount; return oldState.addAdditionalState("ApsideNumber", apsideCounters); } }