1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.attitudes;
18
19
20 import java.util.List;
21 import java.util.stream.Stream;
22
23 import org.hipparchus.CalculusFieldElement;
24 import org.hipparchus.Field;
25 import org.hipparchus.geometry.euclidean.threed.FieldRotation;
26 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
27 import org.hipparchus.geometry.euclidean.threed.Rotation;
28 import org.orekit.frames.Frame;
29 import org.orekit.propagation.events.EventDetector;
30 import org.orekit.propagation.events.FieldEventDetector;
31 import org.orekit.time.AbsoluteDate;
32 import org.orekit.time.FieldAbsoluteDate;
33 import org.orekit.utils.AngularCoordinates;
34 import org.orekit.utils.FieldAngularCoordinates;
35 import org.orekit.utils.FieldPVCoordinatesProvider;
36 import org.orekit.utils.PVCoordinatesProvider;
37 import org.orekit.utils.ParameterDriver;
38
39
40
41
42
43 public interface AttitudeProviderModifier extends AttitudeProvider {
44
45
46
47
48 AttitudeProvider getUnderlyingAttitudeProvider();
49
50
51 @Override
52 default Attitude getAttitude(final PVCoordinatesProvider pvProv, final AbsoluteDate date, final Frame frame) {
53 return getUnderlyingAttitudeProvider().getAttitude(pvProv, date, frame);
54 }
55
56
57 @Override
58 default <T extends CalculusFieldElement<T>> FieldAttitude<T> getAttitude(final FieldPVCoordinatesProvider<T> pvProv,
59 final FieldAbsoluteDate<T> date,
60 final Frame frame) {
61 return getUnderlyingAttitudeProvider().getAttitude(pvProv, date, frame);
62 }
63
64
65 @Override
66 default Stream<EventDetector> getEventDetectors(final List<ParameterDriver> parameterDrivers) {
67 return getUnderlyingAttitudeProvider().getEventDetectors(parameterDrivers);
68 }
69
70
71 @Override
72 default <T extends CalculusFieldElement<T>> Stream<FieldEventDetector<T>> getFieldEventDetectors(final Field<T> field,
73 final List<ParameterDriver> parameterDrivers) {
74 return getUnderlyingAttitudeProvider().getFieldEventDetectors(field, parameterDrivers);
75 }
76
77
78 @Override
79 default List<ParameterDriver> getParametersDrivers() {
80 return getUnderlyingAttitudeProvider().getParametersDrivers();
81 }
82
83
84
85
86
87
88
89
90 static AttitudeProviderModifier getFrozenAttitudeProvider(final AttitudeProvider attitudeProvider) {
91 return new AttitudeProviderModifier() {
92 @Override
93 public Attitude getAttitude(final PVCoordinatesProvider pvProv, final AbsoluteDate date, final Frame frame) {
94 final Rotation rotation = getAttitudeRotation(pvProv, date, frame);
95 final AngularCoordinates angularCoordinates = new AngularCoordinates(rotation);
96 return new Attitude(date, frame, angularCoordinates);
97 }
98
99 @Override
100 public Rotation getAttitudeRotation(final PVCoordinatesProvider pvProv, final AbsoluteDate date, final Frame frame) {
101 return attitudeProvider.getAttitudeRotation(pvProv, date, frame);
102 }
103
104 @Override
105 public <T extends CalculusFieldElement<T>> FieldAttitude<T> getAttitude(final FieldPVCoordinatesProvider<T> pvProv, final FieldAbsoluteDate<T> date, final Frame frame) {
106 final FieldRotation<T> rotation = getAttitudeRotation(pvProv, date, frame);
107 final FieldAngularCoordinates<T> angularCoordinates = new FieldAngularCoordinates<>(rotation, FieldVector3D.getZero(date.getField()));
108 return new FieldAttitude<>(date, frame, angularCoordinates);
109 }
110
111 @Override
112 public <T extends CalculusFieldElement<T>> FieldRotation<T> getAttitudeRotation(final FieldPVCoordinatesProvider<T> pvProv,
113 final FieldAbsoluteDate<T> date,
114 final Frame frame) {
115 return attitudeProvider.getAttitudeRotation(pvProv, date, frame);
116 }
117
118 @Override
119 public AttitudeProvider getUnderlyingAttitudeProvider() {
120 return attitudeProvider;
121 }
122 };
123 }
124 }