1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.utils;
18
19 import org.hipparchus.analysis.differentiation.Derivative;
20 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
21 import org.hipparchus.geometry.euclidean.threed.Vector3D;
22 import org.orekit.annotation.DefaultDataContext;
23 import org.orekit.data.DataContext;
24 import org.orekit.frames.Frame;
25 import org.orekit.frames.StaticTransform;
26 import org.orekit.frames.Transform;
27 import org.orekit.time.AbsoluteDate;
28 import org.orekit.time.TimeOffset;
29 import org.orekit.time.TimeScale;
30 import org.orekit.time.TimeStamped;
31
32
33
34
35
36
37 public class TimeStampedPVCoordinates extends PVCoordinates implements TimeStamped {
38
39
40 private final AbsoluteDate date;
41
42
43
44
45
46
47
48 public TimeStampedPVCoordinates(final AbsoluteDate date,
49 final Vector3D position, final Vector3D velocity, final Vector3D acceleration) {
50 super(position, velocity, acceleration);
51 this.date = date;
52 }
53
54
55
56
57
58
59
60
61 public TimeStampedPVCoordinates(final AbsoluteDate date,
62 final Vector3D position,
63 final Vector3D velocity) {
64 this(date, position, velocity, Vector3D.ZERO);
65 }
66
67
68
69
70
71
72
73 public TimeStampedPVCoordinates(final AbsoluteDate date, final PVCoordinates pv) {
74 this(date, pv.getPosition(), pv.getVelocity(), pv.getAcceleration());
75 }
76
77
78
79
80
81
82
83
84 public TimeStampedPVCoordinates(final AbsoluteDate date,
85 final double a, final PVCoordinates pv) {
86 super(new Vector3D(a, pv.getPosition()),
87 new Vector3D(a, pv.getVelocity()),
88 new Vector3D(a, pv.getAcceleration()));
89 this.date = date;
90 }
91
92
93
94
95
96
97
98
99 public TimeStampedPVCoordinates(final AbsoluteDate date,
100 final PVCoordinates start, final PVCoordinates end) {
101 super(end.getPosition().subtract(start.getPosition()),
102 end.getVelocity().subtract(start.getVelocity()),
103 end.getAcceleration().subtract(start.getAcceleration()));
104 this.date = date;
105 }
106
107
108
109
110
111
112
113
114
115
116 public TimeStampedPVCoordinates(final AbsoluteDate date,
117 final double a1, final PVCoordinates pv1,
118 final double a2, final PVCoordinates pv2) {
119 super(new Vector3D(a1, pv1.getPosition(), a2, pv2.getPosition()),
120 new Vector3D(a1, pv1.getVelocity(), a2, pv2.getVelocity()),
121 new Vector3D(a1, pv1.getAcceleration(), a2, pv2.getAcceleration()));
122 this.date = date;
123 }
124
125
126
127
128
129
130
131
132
133
134
135
136 public TimeStampedPVCoordinates(final AbsoluteDate date,
137 final double a1, final PVCoordinates pv1,
138 final double a2, final PVCoordinates pv2,
139 final double a3, final PVCoordinates pv3) {
140 super(new Vector3D(a1, pv1.getPosition(), a2, pv2.getPosition(), a3, pv3.getPosition()),
141 new Vector3D(a1, pv1.getVelocity(), a2, pv2.getVelocity(), a3, pv3.getVelocity()),
142 new Vector3D(a1, pv1.getAcceleration(), a2, pv2.getAcceleration(), a3, pv3.getAcceleration()));
143 this.date = date;
144 }
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159 public TimeStampedPVCoordinates(final AbsoluteDate date,
160 final double a1, final PVCoordinates pv1,
161 final double a2, final PVCoordinates pv2,
162 final double a3, final PVCoordinates pv3,
163 final double a4, final PVCoordinates pv4) {
164 super(new Vector3D(a1, pv1.getPosition(), a2, pv2.getPosition(), a3, pv3.getPosition(), a4, pv4.getPosition()),
165 new Vector3D(a1, pv1.getVelocity(), a2, pv2.getVelocity(), a3, pv3.getVelocity(), a4, pv4.getVelocity()),
166 new Vector3D(a1, pv1.getAcceleration(), a2, pv2.getAcceleration(), a3, pv3.getAcceleration(), a4, pv4.getAcceleration()));
167 this.date = date;
168 }
169
170
171
172
173
174
175
176
177
178
179 public <U extends Derivative<U>> TimeStampedPVCoordinates(final AbsoluteDate date, final FieldVector3D<U> p) {
180 super(p);
181 this.date = date;
182 }
183
184
185 public AbsoluteDate getDate() {
186 return date;
187 }
188
189
190
191
192
193
194
195
196
197
198
199 public TimeStampedPVCoordinates shiftedBy(final double dt) {
200 final PVCoordinates spv = super.shiftedBy(dt);
201 return new TimeStampedPVCoordinates(date.shiftedBy(dt),
202 spv.getPosition(), spv.getVelocity(), spv.getAcceleration());
203 }
204
205
206
207
208
209
210
211
212
213
214
215
216 public TimeStampedPVCoordinates shiftedBy(final TimeOffset dt) {
217 final PVCoordinates spv = super.shiftedBy(dt);
218 return new TimeStampedPVCoordinates(date.shiftedBy(dt),
219 spv.getPosition(), spv.getVelocity(), spv.getAcceleration());
220 }
221
222
223
224
225
226
227
228
229
230
231 public PVCoordinatesProvider toTaylorProvider(final Frame instanceFrame) {
232 return new PVCoordinatesProvider() {
233
234 public Vector3D getPosition(final AbsoluteDate d, final Frame f) {
235 final TimeStampedPVCoordinates shifted = shiftedBy(d.durationFrom(getDate()));
236 final StaticTransform transform = instanceFrame.getStaticTransformTo(f, d);
237 return transform.transformPosition(shifted.getPosition());
238 }
239
240 public TimeStampedPVCoordinates getPVCoordinates(final AbsoluteDate d, final Frame f) {
241 final TimeStampedPVCoordinates shifted = shiftedBy(d.durationFrom(date));
242 final Transform transform = instanceFrame.getTransformTo(f, d);
243 return transform.transformPVCoordinates(shifted);
244 }
245 };
246 }
247
248
249
250
251
252
253
254 @Override
255 @DefaultDataContext
256 public String toString() {
257 return toString(DataContext.getDefault().getTimeScales().getUTC());
258 }
259
260
261
262
263
264
265
266 public String toString(final TimeScale utc) {
267 final String comma = ", ";
268 return new StringBuilder().append('{').
269 append(date.toString(utc)).append(", P(").
270 append(getPosition().getX()).append(comma).
271 append(getPosition().getY()).append(comma).
272 append(getPosition().getZ()).append("), V(").
273 append(getVelocity().getX()).append(comma).
274 append(getVelocity().getY()).append(comma).
275 append(getVelocity().getZ()).append("), A(").
276 append(getAcceleration().getX()).append(comma).
277 append(getAcceleration().getY()).append(comma).
278 append(getAcceleration().getZ()).append(")}").toString();
279 }
280
281 }