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.CalculusFieldElement;
20 import org.hipparchus.Field;
21 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
22 import org.hipparchus.geometry.euclidean.threed.Vector3D;
23 import org.orekit.frames.Frame;
24 import org.orekit.time.AbsoluteDate;
25 import org.orekit.time.FieldAbsoluteDate;
26
27
28
29
30
31
32
33 public class ConstantPositionProvider implements ExtendedPositionProvider {
34
35
36 private final Vector3D constantPosition;
37
38
39 private final Frame referenceFrame;
40
41
42
43
44
45 public ConstantPositionProvider(final Vector3D constantPosition, final Frame referenceFrame) {
46 this.constantPosition = constantPosition;
47 this.referenceFrame = referenceFrame;
48 }
49
50
51
52
53
54 public Vector3D getConstantPosition() {
55 return constantPosition;
56 }
57
58
59 @Override
60 public Vector3D getPosition(final AbsoluteDate date, final Frame frame) {
61 if (referenceFrame == frame) {
62 return constantPosition;
63 }
64 return referenceFrame.getStaticTransformTo(frame, date).transformPosition(constantPosition);
65 }
66
67
68 @Override
69 public <T extends CalculusFieldElement<T>> FieldVector3D<T> getPosition(final FieldAbsoluteDate<T> date,
70 final Frame frame) {
71 if (referenceFrame == frame) {
72 return new FieldVector3D<>(date.getField(), constantPosition);
73 }
74 return referenceFrame.getStaticTransformTo(frame, date).transformPosition(constantPosition);
75 }
76
77
78 @Override
79 public Vector3D getVelocity(final AbsoluteDate date, final Frame frame) {
80 if (referenceFrame == frame) {
81 return Vector3D.ZERO;
82 }
83 final PVCoordinates pvCoordinates = new PVCoordinates(constantPosition);
84 return referenceFrame.getKinematicTransformTo(frame, date).transformOnlyPV(pvCoordinates).getVelocity();
85 }
86
87
88 @Override
89 public <T extends CalculusFieldElement<T>> FieldVector3D<T> getVelocity(final FieldAbsoluteDate<T> date,
90 final Frame frame) {
91 if (referenceFrame == frame) {
92 return FieldVector3D.getZero(date.getField());
93 }
94 final Field<T> field = date.getField();
95 final FieldVector3D<T> fieldconstantPosition = new FieldVector3D<>(field, constantPosition);
96 final FieldPVCoordinates<T> fieldPVCoordinates = new FieldPVCoordinates<>(fieldconstantPosition, FieldVector3D.getZero(field));
97 return referenceFrame.getKinematicTransformTo(frame, date).transformOnlyPV(fieldPVCoordinates).getVelocity();
98 }
99
100
101 @Override
102 public TimeStampedPVCoordinates getPVCoordinates(final AbsoluteDate date, final Frame frame) {
103 final TimeStampedPVCoordinates pvCoordinates = new TimeStampedPVCoordinates(date, constantPosition, Vector3D.ZERO);
104 if (referenceFrame == frame) {
105 return pvCoordinates;
106 }
107 return referenceFrame.getTransformTo(frame, date).transformPVCoordinates(pvCoordinates);
108 }
109
110
111 @Override
112 public <T extends CalculusFieldElement<T>> TimeStampedFieldPVCoordinates<T> getPVCoordinates(final FieldAbsoluteDate<T> date,
113 final Frame frame) {
114 final Field<T> field = date.getField();
115 final FieldVector3D<T> fieldconstantPosition = new FieldVector3D<>(field, constantPosition);
116 final TimeStampedFieldPVCoordinates<T> fieldPVCoordinates = new TimeStampedFieldPVCoordinates<>(date,
117 new FieldPVCoordinates<>(fieldconstantPosition, FieldVector3D.getZero(field)));
118 if (referenceFrame == frame) {
119 return fieldPVCoordinates;
120 }
121 return referenceFrame.getTransformTo(frame, date).transformPVCoordinates(fieldPVCoordinates);
122 }
123
124 }