1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.conversion.averaging;
18
19 import org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider;
20 import org.orekit.frames.Frame;
21 import org.orekit.orbits.EquinoctialOrbit;
22 import org.orekit.orbits.Orbit;
23 import org.orekit.orbits.OrbitType;
24 import org.orekit.orbits.PositionAngleType;
25 import org.orekit.propagation.SpacecraftState;
26 import org.orekit.propagation.semianalytical.dsst.DSSTPropagator;
27 import org.orekit.propagation.semianalytical.dsst.forces.DSSTForceModel;
28 import org.orekit.propagation.semianalytical.dsst.forces.DSSTZonal;
29 import org.orekit.time.AbsoluteDate;
30 import org.orekit.propagation.conversion.averaging.elements.AveragedEquinoctialWithMeanAngle;
31
32 import java.util.ArrayList;
33 import java.util.Collection;
34 import java.util.List;
35
36
37
38
39
40
41
42
43
44
45
46 public class DSST6X0OrbitalState extends AbstractHarmonicsBasedOrbitalState {
47
48
49 private final AveragedEquinoctialWithMeanAngle averagedElements;
50
51
52
53
54
55
56
57
58 public DSST6X0OrbitalState(final AbsoluteDate date,
59 final AveragedEquinoctialWithMeanAngle elements,
60 final Frame frame,
61 final UnnormalizedSphericalHarmonicsProvider harmonicsProvider) {
62 super(date, frame, harmonicsProvider);
63 this.averagedElements = elements;
64 }
65
66
67
68
69
70
71 public static Collection<DSSTForceModel> createForces(final UnnormalizedSphericalHarmonicsProvider provider) {
72 final List<DSSTForceModel> forceModels = new ArrayList<>();
73 final DSSTZonal zonal = new DSSTZonal(provider);
74 forceModels.add(zonal);
75 return forceModels;
76 }
77
78
79 @Override
80 public OrbitType getOrbitType() {
81 return OrbitType.EQUINOCTIAL;
82 }
83
84
85 @Override
86 public PositionAngleType getPositionAngleType() {
87 return PositionAngleType.MEAN;
88 }
89
90
91 @Override
92 public AveragedEquinoctialWithMeanAngle getAveragedElements() {
93 return averagedElements;
94 }
95
96
97 @Override
98 public Orbit toOsculatingOrbit() {
99 final EquinoctialOrbit orekitOrbit = createOrekitOrbit();
100 final Collection<DSSTForceModel> forceModels = createForces(getHarmonicsProvider());
101 final SpacecraftState osculatingState = DSSTPropagator.computeOsculatingState(
102 new SpacecraftState(orekitOrbit), null, forceModels);
103 return osculatingState.getOrbit();
104 }
105
106
107
108
109
110 private EquinoctialOrbit createOrekitOrbit() {
111 return new EquinoctialOrbit(averagedElements.getAveragedSemiMajorAxis(),
112 averagedElements.getAveragedEquinoctialEx(),
113 averagedElements.getAveragedEquinoctialEy(),
114 averagedElements.getAveragedHx(), averagedElements.getAveragedHy(),
115 averagedElements.getAveragedMeanLongitudeArgument(),
116 getPositionAngleType(), getFrame(), getDate(), getMu());
117 }
118
119 }