1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.orekit.files.ccsds.ndm.adm.acm;
19
20 import java.util.List;
21
22 import org.hipparchus.geometry.euclidean.threed.RotationOrder;
23 import org.orekit.time.AbsoluteDate;
24 import org.orekit.time.TimeStamped;
25 import org.orekit.utils.AngularDerivativesFilter;
26 import org.orekit.utils.TimeStampedAngularCoordinates;
27 import org.orekit.utils.units.Unit;
28
29
30
31
32
33 public class AttitudeState implements TimeStamped {
34
35
36 private final AttitudeElementsType attitudeType;
37
38
39 private final RateElementsType rateType;
40
41
42 private final AbsoluteDate date;
43
44
45 private final double[] elements;
46
47
48
49
50
51
52
53
54
55 public AttitudeState(final AttitudeElementsType attitudeType, final RateElementsType rateType,
56 final AbsoluteDate date, final String[] fields, final int first) {
57
58 this.attitudeType = attitudeType;
59 this.rateType = rateType == null ? RateElementsType.NONE : rateType;
60
61 final List<Unit> attUnits = this.attitudeType.getUnits();
62 final List<Unit> rateUnits = this.rateType.getUnits();
63
64 this.date = date;
65 this.elements = new double[attUnits.size() + rateUnits.size()];
66 for (int i = 0; i < attUnits.size(); ++i) {
67 elements[i] = attUnits.get(i).toSI(Double.parseDouble(fields[first + i]));
68 }
69 for (int i = 0; i < rateUnits.size(); ++i) {
70 elements[attUnits.size() + i] = rateUnits.get(i).toSI(Double.parseDouble(fields[attUnits.size() + first + i]));
71 }
72 }
73
74
75 @Override
76 public AbsoluteDate getDate() {
77 return date;
78 }
79
80
81
82
83 public double[] getElements() {
84 return elements.clone();
85 }
86
87
88
89
90 public AttitudeElementsType getAttitudeType() {
91 return attitudeType;
92 }
93
94
95
96
97 public RateElementsType getRateElementsType() {
98 return rateType;
99 }
100
101
102
103
104 public AngularDerivativesFilter getAvailableDerivatives() {
105 return rateType == RateElementsType.NONE ?
106 AngularDerivativesFilter.USE_R :
107 AngularDerivativesFilter.USE_RR;
108 }
109
110
111
112
113
114 public TimeStampedAngularCoordinates toAngular(final RotationOrder order) {
115 return rateType.toAngular(getDate(), order,
116 attitudeType.toRotation(order, elements),
117 attitudeType.getUnits().size(), elements);
118 }
119
120 }