1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.attitudes;
18
19 import org.hipparchus.CalculusFieldElement;
20 import org.orekit.frames.Frame;
21 import org.orekit.time.AbstractFieldTimeInterpolator;
22 import org.orekit.time.FieldTimeInterpolator;
23 import org.orekit.time.FieldTimeStamped;
24 import org.orekit.utils.TimeStampedFieldAngularCoordinates;
25
26 import java.util.Collections;
27 import java.util.List;
28 import java.util.stream.Collectors;
29 import java.util.stream.Stream;
30
31
32
33
34
35
36
37
38
39
40
41
42 public class FieldAttitudeInterpolator<KK extends CalculusFieldElement<KK>>
43 extends AbstractFieldTimeInterpolator<FieldAttitude<KK>, KK> {
44
45
46 private final Frame referenceFrame;
47
48
49 private final FieldTimeInterpolator<TimeStampedFieldAngularCoordinates<KK>, KK> interpolator;
50
51
52
53
54
55
56
57 public FieldAttitudeInterpolator(final Frame referenceFrame,
58 final FieldTimeInterpolator<TimeStampedFieldAngularCoordinates<KK>, KK> interpolator) {
59 super(interpolator.getNbInterpolationPoints(), interpolator.getExtrapolationThreshold());
60 this.referenceFrame = referenceFrame;
61 this.interpolator = interpolator;
62 }
63
64
65
66
67 public Frame getReferenceFrame() {
68 return referenceFrame;
69 }
70
71
72
73
74 public FieldTimeInterpolator<TimeStampedFieldAngularCoordinates<KK>, KK> getAngularInterpolator() {
75 return interpolator;
76 }
77
78
79 @Override
80 protected FieldAttitude<KK> interpolate(final InterpolationData interpolationData) {
81
82
83 final Stream<FieldAttitude<KK>> sample = interpolationData.getNeighborList().stream();
84
85
86 final Stream<FieldAttitude<KK>> consistentSample =
87 sample.map(attitude -> attitude.withReferenceFrame(referenceFrame));
88
89
90 final List<TimeStampedFieldAngularCoordinates<KK>> angularSample =
91 consistentSample.map(FieldAttitude::getOrientation).collect(Collectors.toList());
92
93
94 final TimeStampedFieldAngularCoordinates<KK> interpolated =
95 interpolator.interpolate(interpolationData.getInterpolationDate(), angularSample);
96
97 return new FieldAttitude<>(referenceFrame, interpolated);
98 }
99
100 @Override
101 public List<FieldTimeInterpolator<? extends FieldTimeStamped<KK>, KK>> getSubInterpolators() {
102 return Collections.singletonList(interpolator);
103 }
104 }