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