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.geometry.euclidean.threed.FieldRotation;
22 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
23 import org.hipparchus.geometry.euclidean.threed.Rotation;
24 import org.hipparchus.geometry.euclidean.threed.Vector3D;
25 import org.orekit.frames.Frame;
26 import org.orekit.time.AbsoluteDate;
27 import org.orekit.time.FieldAbsoluteDate;
28 import org.orekit.utils.AngularCoordinates;
29 import org.orekit.utils.FieldAngularCoordinates;
30 import org.orekit.utils.FieldPVCoordinatesProvider;
31 import org.orekit.utils.PVCoordinatesProvider;
32
33
34
35
36
37 public interface AttitudeProviderModifier extends AttitudeProvider {
38
39
40
41
42 AttitudeProvider getUnderlyingAttitudeProvider();
43
44
45
46
47
48
49
50
51 static AttitudeProviderModifier getFrozenAttitudeProvider(final AttitudeProvider attitudeProvider) {
52 return new AttitudeProviderModifier() {
53 @Override
54 public Attitude getAttitude(final PVCoordinatesProvider pvProv, final AbsoluteDate date, final Frame frame) {
55 final Rotation rotation = attitudeProvider.getAttitudeRotation(pvProv, date, frame);
56 final AngularCoordinates angularCoordinates = new AngularCoordinates(rotation, Vector3D.ZERO);
57 return new Attitude(date, frame, angularCoordinates);
58 }
59
60 @Override
61 public <T extends CalculusFieldElement<T>> FieldAttitude<T> getAttitude(final FieldPVCoordinatesProvider<T> pvProv, final FieldAbsoluteDate<T> date, final Frame frame) {
62 final FieldRotation<T> rotation = attitudeProvider.getAttitudeRotation(pvProv, date, frame);
63 final FieldAngularCoordinates<T> angularCoordinates = new FieldAngularCoordinates<>(rotation, FieldVector3D.getZero(date.getField()));
64 return new FieldAttitude<>(date, frame, angularCoordinates);
65 }
66
67 @Override
68 public AttitudeProvider getUnderlyingAttitudeProvider() {
69 return attitudeProvider;
70 }
71 };
72 }
73 }