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.hipparchus.geometry.euclidean.threed.FieldVector3D;
21 import org.hipparchus.geometry.euclidean.threed.Vector3D;
22 import org.orekit.bodies.BodyShape;
23 import org.orekit.bodies.GeodeticPoint;
24 import org.orekit.frames.FieldStaticTransform;
25 import org.orekit.frames.FieldTransform;
26 import org.orekit.frames.Frame;
27 import org.orekit.frames.StaticTransform;
28 import org.orekit.frames.Transform;
29 import org.orekit.time.AbsoluteDate;
30 import org.orekit.time.FieldAbsoluteDate;
31 import org.orekit.utils.FieldPVCoordinatesProvider;
32 import org.orekit.utils.PVCoordinatesProvider;
33 import org.orekit.utils.TimeStampedFieldPVCoordinates;
34 import org.orekit.utils.TimeStampedPVCoordinates;
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 public class TargetPointing extends GroundPointing {
53
54
55 private final Vector3D target;
56
57
58
59
60
61
62
63 public TargetPointing(final Frame inertialFrame, final Frame bodyFrame, final Vector3D target) {
64 super(inertialFrame, bodyFrame);
65 this.target = target;
66 }
67
68
69
70
71
72
73
74 public TargetPointing(final Frame inertialFrame, final GeodeticPoint targetGeo, final BodyShape shape) {
75 super(inertialFrame, shape.getBodyFrame());
76
77 target = shape.transform(targetGeo);
78 }
79
80
81 @Override
82 public TimeStampedPVCoordinates getTargetPV(final PVCoordinatesProvider pvProv,
83 final AbsoluteDate date, final Frame frame) {
84 final Transform t = getBodyFrame().getTransformTo(frame, date);
85 final TimeStampedPVCoordinates pv =
86 new TimeStampedPVCoordinates(date, target, Vector3D.ZERO, Vector3D.ZERO);
87 return t.transformPVCoordinates(pv);
88 }
89
90
91 @Override
92 protected Vector3D getTargetPosition(final PVCoordinatesProvider pvProv, final AbsoluteDate date, final Frame frame) {
93 final StaticTransform staticTransform = getBodyFrame().getStaticTransformTo(frame, date);
94 return staticTransform.transformPosition(target);
95 }
96
97
98 @Override
99 public <T extends CalculusFieldElement<T>> TimeStampedFieldPVCoordinates<T> getTargetPV(final FieldPVCoordinatesProvider<T> pvProv,
100 final FieldAbsoluteDate<T> date, final Frame frame) {
101 final FieldTransform<T> t = getBodyFrame().getTransformTo(frame, date);
102 final FieldVector3D<T> zero = FieldVector3D.getZero(date.getField());
103 final TimeStampedFieldPVCoordinates<T> pv =
104 new TimeStampedFieldPVCoordinates<>(date, new FieldVector3D<>(date.getField(), target), zero, zero);
105 return t.transformPVCoordinates(pv);
106 }
107
108
109 @Override
110 protected <T extends CalculusFieldElement<T>> FieldVector3D<T> getTargetPosition(final FieldPVCoordinatesProvider<T> pvProv,
111 final FieldAbsoluteDate<T> date,
112 final Frame frame) {
113 final FieldStaticTransform<T> staticTransform = getBodyFrame().getStaticTransformTo(frame, date);
114 return staticTransform.transformPosition(target);
115 }
116 }