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.geometry.euclidean.threed.Vector3D;
20 import org.hipparchus.util.FastMath;
21 import org.junit.jupiter.api.Assertions;
22 import org.junit.jupiter.api.BeforeEach;
23 import org.junit.jupiter.api.Test;
24 import org.orekit.Utils;
25 import org.orekit.bodies.GeodeticPoint;
26 import org.orekit.bodies.OneAxisEllipsoid;
27 import org.orekit.frames.Frame;
28 import org.orekit.frames.FramesFactory;
29 import org.orekit.models.earth.ReferenceEllipsoid;
30 import org.orekit.time.AbsoluteDate;
31 import org.orekit.time.DateTimeComponents;
32 import org.orekit.time.TimeScalesFactory;
33 import org.orekit.time.UTCScale;
34
35 import java.util.PrimitiveIterator;
36 import java.util.Random;
37 import java.util.stream.DoubleStream;
38
39
40 public class ConstantPVCoordinatesProviderTest {
41
42 @BeforeEach
43 public void setup() {
44 Utils.setDataRoot("regular-data");
45 }
46
47 @Test
48 void testGetVelocity() {
49
50 final PVCoordinates pvCoordinates = new PVCoordinates(Vector3D.MINUS_I, Vector3D.MINUS_K);
51 final Frame frame = FramesFactory.getEME2000();
52 final ConstantPVCoordinatesProvider provider = new ConstantPVCoordinatesProvider(pvCoordinates, frame);
53
54 final Vector3D velocity = provider.getVelocity(AbsoluteDate.ARBITRARY_EPOCH, frame);
55
56 Assertions.assertEquals(pvCoordinates.getVelocity(), velocity);
57 }
58
59 @Test
60 public void verifyEllipsoidLocation() {
61 final Frame itrf = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
62 final OneAxisEllipsoid body = ReferenceEllipsoid.getWgs84(itrf);
63
64 final GeodeticPoint point = new GeodeticPoint(FastMath.toRadians(39.952330), FastMath.toRadians(-75.16379), 12.192);
65
66 final Vector3D posItrf = body.transform(point);
67 final Vector3D velItrf = Vector3D.ZERO;
68 final PVCoordinates pvItrf = new PVCoordinates(posItrf, velItrf);
69
70 final Frame gcrf = FramesFactory.getGCRF();
71 final Frame eme2000 = FramesFactory.getEME2000();
72
73 final UTCScale utc = TimeScalesFactory.getUTC();
74 final AbsoluteDate epoch = new AbsoluteDate(DateTimeComponents.parseDateTime("2022-06-01T10:35:00Z"), utc);
75
76 final PVCoordinatesProvider pvProv = new ConstantPVCoordinatesProvider(point, body);
77
78
79 final TimeStampedPVCoordinates tpvItrf = pvProv.getPVCoordinates(epoch, itrf);
80 Assertions.assertEquals(epoch, tpvItrf.getDate());
81 Assertions.assertEquals(tpvItrf.getPosition(), posItrf);
82 Assertions.assertEquals(tpvItrf.getVelocity(), velItrf);
83 Assertions.assertEquals(tpvItrf.getAcceleration(), Vector3D.ZERO);
84
85 final PVCoordinates pvGcrf = itrf.getTransformTo(gcrf, epoch).transformPVCoordinates(pvItrf);
86 final TimeStampedPVCoordinates tpvGcrf = pvProv.getPVCoordinates(epoch, gcrf);
87 Assertions.assertEquals(epoch, tpvGcrf.getDate());
88 Assertions.assertEquals(pvGcrf.getPosition(), tpvGcrf.getPosition());
89 Assertions.assertEquals(pvGcrf.getVelocity(), tpvGcrf.getVelocity());
90 Assertions.assertEquals(pvGcrf.getAcceleration(), tpvGcrf.getAcceleration());
91
92 final PVCoordinates pvEme2000 = itrf.getTransformTo(eme2000, epoch).transformPVCoordinates(pvItrf);
93 final TimeStampedPVCoordinates tpvEME2000 = pvProv.getPVCoordinates(epoch, eme2000);
94 Assertions.assertEquals(epoch, tpvEME2000.getDate());
95 Assertions.assertEquals(pvEme2000.getPosition(), tpvEME2000.getPosition());
96 Assertions.assertEquals(pvEme2000.getVelocity(), tpvEME2000.getVelocity());
97 Assertions.assertEquals(pvEme2000.getAcceleration(), tpvEME2000.getAcceleration());
98
99 final Random rand = new Random();
100 final DoubleStream stream = rand.doubles(1., 604800.);
101 final PrimitiveIterator.OfDouble iter = stream.limit(100).iterator();
102 for (int i = 0; i < 100; i++) {
103 final AbsoluteDate date = epoch.shiftedBy(iter.nextDouble());
104
105
106 final TimeStampedPVCoordinates actualItrf = pvProv.getPVCoordinates(date, itrf);
107 Assertions.assertEquals(date, actualItrf.getDate());
108 Assertions.assertEquals(posItrf, actualItrf.getPosition());
109 Assertions.assertEquals(velItrf, actualItrf.getVelocity());
110 Assertions.assertEquals(Vector3D.ZERO, actualItrf.getAcceleration());
111
112
113 final PVCoordinates expectedGcrf = itrf.getTransformTo(gcrf, date).transformPVCoordinates(pvItrf);
114 final TimeStampedPVCoordinates actualGcrf = pvProv.getPVCoordinates(date, gcrf);
115 Assertions.assertEquals(date, actualGcrf.getDate());
116 Assertions.assertEquals(expectedGcrf.getPosition(), actualGcrf.getPosition());
117 Assertions.assertEquals(expectedGcrf.getVelocity(), actualGcrf.getVelocity());
118 Assertions.assertEquals(expectedGcrf.getAcceleration(), actualGcrf.getAcceleration());
119
120
121 final PVCoordinates expectedEme2000 = itrf.getTransformTo(eme2000, date).transformPVCoordinates(pvItrf);
122 final TimeStampedPVCoordinates actualEme2000 = pvProv.getPVCoordinates(date, eme2000);
123 Assertions.assertEquals(date, actualEme2000.getDate());
124 Assertions.assertEquals(expectedEme2000.getPosition(), actualEme2000.getPosition());
125 Assertions.assertEquals(expectedEme2000.getVelocity(), actualEme2000.getVelocity());
126 Assertions.assertEquals(expectedEme2000.getAcceleration(), actualEme2000.getAcceleration());
127 }
128 }
129 }