1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.events;
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.BodyShape;
26 import org.orekit.bodies.GeodeticPoint;
27 import org.orekit.bodies.OneAxisEllipsoid;
28 import org.orekit.frames.Frame;
29 import org.orekit.frames.FramesFactory;
30 import org.orekit.frames.TopocentricFrame;
31 import org.orekit.geometry.fov.FieldOfView;
32 import org.orekit.geometry.fov.PolygonalFieldOfView;
33 import org.orekit.geometry.fov.PolygonalFieldOfView.DefiningConeType;
34 import org.orekit.orbits.KeplerianOrbit;
35 import org.orekit.orbits.PositionAngleType;
36 import org.orekit.propagation.Propagator;
37 import org.orekit.propagation.analytical.KeplerianPropagator;
38 import org.orekit.propagation.events.EventsLogger.LoggedEvent;
39 import org.orekit.time.AbsoluteDate;
40 import org.orekit.utils.Constants;
41 import org.orekit.utils.IERSConventions;
42
43 import java.util.List;
44
45
46
47
48
49
50 public class GroundFieldOfViewDetectorTest {
51
52 @BeforeEach
53 public void setUp() {
54 Utils.setDataRoot("regular-data");
55 }
56
57
58
59
60
61 @Test
62 public void testCaseSimilarToElevationDetector() {
63
64 double pi = FastMath.PI;
65 AbsoluteDate date = AbsoluteDate.J2000_EPOCH;
66 AbsoluteDate endDate = date.shiftedBy(Constants.JULIAN_DAY);
67 Frame eci = FramesFactory.getGCRF();
68 Frame ecef = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
69 BodyShape earth = new OneAxisEllipsoid(
70 Constants.WGS84_EARTH_EQUATORIAL_RADIUS,
71 Constants.WGS84_EARTH_FLATTENING,
72 ecef);
73 GeodeticPoint gp = new GeodeticPoint(
74 FastMath.toRadians(39), FastMath.toRadians(77), 0);
75 TopocentricFrame topo = new TopocentricFrame(earth, gp, "topo");
76
77 KeplerianOrbit orbit = new KeplerianOrbit(
78 6378137 + 400e3, 0, FastMath.toRadians(51.65), 0, 0, 0,
79 PositionAngleType.TRUE, eci, date, Constants.EGM96_EARTH_MU);
80 Propagator prop = new KeplerianPropagator(orbit);
81
82
83 ElevationDetector elevationDetector =
84 new ElevationDetector(topo).withConstantElevation(pi / 6)
85 .withMaxCheck(5.0);
86 EventsLogger logger = new EventsLogger();
87 prop.addEventDetector(logger.monitorDetector(elevationDetector));
88 prop.propagate(endDate);
89 List<LoggedEvent> expected = logger.getLoggedEvents();
90
91
92
93
94
95 FieldOfView fov =
96 new PolygonalFieldOfView(Vector3D.PLUS_K,
97 DefiningConeType.INSIDE_CONE_TOUCHING_POLYGON_AT_EDGES_MIDDLE,
98 Vector3D.PLUS_I, pi / 3, 16, 0);
99
100
101 GroundFieldOfViewDetector fovDetector =
102 new GroundFieldOfViewDetector(topo, fov)
103 .withMaxCheck(5.0);
104 Assertions.assertSame(topo, fovDetector.getFrame());
105 Assertions.assertSame(fov, fovDetector.getFOV());
106 logger = new EventsLogger();
107
108 prop = new KeplerianPropagator(orbit);
109 prop.addEventDetector(logger.monitorDetector(fovDetector));
110 prop.propagate(endDate);
111 List<LoggedEvent> actual = logger.getLoggedEvents();
112
113
114 Assertions.assertEquals(2, expected.size());
115 Assertions.assertEquals(2, actual.size());
116 for (int i = 0; i < 2; i++) {
117 AbsoluteDate expectedDate = expected.get(i).getState().getDate();
118 AbsoluteDate actualDate = actual.get(i).getState().getDate();
119
120 Assertions.assertEquals(expectedDate.durationFrom(actualDate), 0.0, 1.0);
121 }
122
123 }
124
125 }