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 public void verifyEllipsoidLocation() {
49 final Frame itrf = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
50 final OneAxisEllipsoid body = ReferenceEllipsoid.getWgs84(itrf);
51
52 final GeodeticPoint point = new GeodeticPoint(FastMath.toRadians(39.952330), FastMath.toRadians(-75.16379), 12.192);
53
54 final Vector3D posItrf = body.transform(point);
55 final Vector3D velItrf = Vector3D.ZERO;
56 final PVCoordinates pvItrf = new PVCoordinates(posItrf, velItrf);
57
58 final Frame gcrf = FramesFactory.getGCRF();
59 final Frame eme2000 = FramesFactory.getEME2000();
60
61 final UTCScale utc = TimeScalesFactory.getUTC();
62 final AbsoluteDate epoch = new AbsoluteDate(DateTimeComponents.parseDateTime("2022-06-01T10:35:00Z"), utc);
63
64 final PVCoordinatesProvider pvProv = new ConstantPVCoordinatesProvider(point, body);
65
66
67 final TimeStampedPVCoordinates tpvItrf = pvProv.getPVCoordinates(epoch, itrf);
68 Assertions.assertEquals(epoch, tpvItrf.getDate());
69 Assertions.assertEquals(tpvItrf.getPosition(), posItrf);
70 Assertions.assertEquals(tpvItrf.getVelocity(), velItrf);
71 Assertions.assertEquals(tpvItrf.getAcceleration(), Vector3D.ZERO);
72
73 final PVCoordinates pvGcrf = itrf.getTransformTo(gcrf, epoch).transformPVCoordinates(pvItrf);
74 final TimeStampedPVCoordinates tpvGcrf = pvProv.getPVCoordinates(epoch, gcrf);
75 Assertions.assertEquals(epoch, tpvGcrf.getDate());
76 Assertions.assertEquals(pvGcrf.getPosition(), tpvGcrf.getPosition());
77 Assertions.assertEquals(pvGcrf.getVelocity(), tpvGcrf.getVelocity());
78 Assertions.assertEquals(pvGcrf.getAcceleration(), tpvGcrf.getAcceleration());
79
80 final PVCoordinates pvEme2000 = itrf.getTransformTo(eme2000, epoch).transformPVCoordinates(pvItrf);
81 final TimeStampedPVCoordinates tpvEME2000 = pvProv.getPVCoordinates(epoch, eme2000);
82 Assertions.assertEquals(epoch, tpvEME2000.getDate());
83 Assertions.assertEquals(pvEme2000.getPosition(), tpvEME2000.getPosition());
84 Assertions.assertEquals(pvEme2000.getVelocity(), tpvEME2000.getVelocity());
85 Assertions.assertEquals(pvEme2000.getAcceleration(), tpvEME2000.getAcceleration());
86
87 final Random rand = new Random();
88 final DoubleStream stream = rand.doubles(1., 604800.);
89 final PrimitiveIterator.OfDouble iter = stream.limit(100).iterator();
90 for (int i = 0; i < 100; i++) {
91 final AbsoluteDate date = epoch.shiftedBy(iter.nextDouble());
92
93
94 final TimeStampedPVCoordinates actualItrf = pvProv.getPVCoordinates(date, itrf);
95 Assertions.assertEquals(date, actualItrf.getDate());
96 Assertions.assertEquals(posItrf, actualItrf.getPosition());
97 Assertions.assertEquals(velItrf, actualItrf.getVelocity());
98 Assertions.assertEquals(Vector3D.ZERO, actualItrf.getAcceleration());
99
100
101 final PVCoordinates expectedGcrf = itrf.getTransformTo(gcrf, date).transformPVCoordinates(pvItrf);
102 final TimeStampedPVCoordinates actualGcrf = pvProv.getPVCoordinates(date, gcrf);
103 Assertions.assertEquals(date, actualGcrf.getDate());
104 Assertions.assertEquals(expectedGcrf.getPosition(), actualGcrf.getPosition());
105 Assertions.assertEquals(expectedGcrf.getVelocity(), actualGcrf.getVelocity());
106 Assertions.assertEquals(expectedGcrf.getAcceleration(), actualGcrf.getAcceleration());
107
108
109 final PVCoordinates expectedEme2000 = itrf.getTransformTo(eme2000, date).transformPVCoordinates(pvItrf);
110 final TimeStampedPVCoordinates actualEme2000 = pvProv.getPVCoordinates(date, eme2000);
111 Assertions.assertEquals(date, actualEme2000.getDate());
112 Assertions.assertEquals(expectedEme2000.getPosition(), actualEme2000.getPosition());
113 Assertions.assertEquals(expectedEme2000.getVelocity(), actualEme2000.getVelocity());
114 Assertions.assertEquals(expectedEme2000.getAcceleration(), actualEme2000.getAcceleration());
115 }
116 }
117 }