1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.rugged.intersection;
18
19 import org.hipparchus.geometry.euclidean.threed.Vector3D;
20 import org.orekit.bodies.GeodeticPoint;
21 import org.orekit.rugged.api.AlgorithmId;
22 import org.orekit.rugged.errors.DumpManager;
23 import org.orekit.rugged.utils.ExtendedEllipsoid;
24 import org.orekit.rugged.utils.NormalizedGeodeticPoint;
25
26
27
28
29
30
31
32 public class ConstantElevationAlgorithm implements IntersectionAlgorithm {
33
34
35 private final double constantElevation;
36
37
38
39
40 public ConstantElevationAlgorithm(final double constantElevation) {
41 this.constantElevation = constantElevation;
42 }
43
44
45 @Override
46 public NormalizedGeodeticPoint intersection(final ExtendedEllipsoid ellipsoid,
47 final Vector3D position, final Vector3D los) {
48 DumpManager.dumpAlgorithm(AlgorithmId.CONSTANT_ELEVATION_OVER_ELLIPSOID, constantElevation);
49 final Vector3D p = ellipsoid.pointAtAltitude(position, los, constantElevation);
50 final GeodeticPoint gp = ellipsoid.transform(p, ellipsoid.getFrame(), null);
51 return new NormalizedGeodeticPoint(gp.getLatitude(), gp.getLongitude(), gp.getAltitude(), 0.0);
52 }
53
54
55 @Override
56 public NormalizedGeodeticPoint refineIntersection(final ExtendedEllipsoid ellipsoid,
57 final Vector3D position, final Vector3D los,
58 final NormalizedGeodeticPoint closeGuess) {
59 DumpManager.dumpAlgorithm(AlgorithmId.CONSTANT_ELEVATION_OVER_ELLIPSOID, constantElevation);
60 final Vector3D p = ellipsoid.pointAtAltitude(position, los, constantElevation);
61 final GeodeticPoint gp = ellipsoid.transform(p, ellipsoid.getFrame(), null);
62 return new NormalizedGeodeticPoint(gp.getLatitude(), gp.getLongitude(), gp.getAltitude(),
63 closeGuess.getLongitude());
64 }
65
66
67
68
69
70
71
72 @Override
73 public double getElevation(final double latitude, final double longitude) {
74 DumpManager.dumpAlgorithm(AlgorithmId.CONSTANT_ELEVATION_OVER_ELLIPSOID, constantElevation);
75 return constantElevation;
76 }
77
78 }