Class OneAxisEllipsoid
- java.lang.Object
-
- org.orekit.bodies.Ellipsoid
-
- org.orekit.bodies.OneAxisEllipsoid
-
- All Implemented Interfaces:
Serializable
,BodyShape
- Direct Known Subclasses:
ReferenceEllipsoid
public class OneAxisEllipsoid extends Ellipsoid implements BodyShape
Modeling of a one-axis ellipsoid.One-axis ellipsoids is a good approximate model for most planet-size and larger natural bodies. It is the equilibrium shape reached by a fluid body under its own gravity field when it rotates. The symmetry axis is the rotation or polar axis.
- Author:
- Luc Maisonobe
- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description OneAxisEllipsoid(double ae, double f, Frame bodyFrame)
Simple constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Frame
getBodyFrame()
Get body frame related to body shape.<T extends org.hipparchus.RealFieldElement<T>>
org.hipparchus.geometry.euclidean.threed.FieldVector3D<T>getCartesianIntersectionPoint(org.hipparchus.geometry.euclidean.threed.FieldLine<T> line, org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> close, Frame frame, FieldAbsoluteDate<T> date)
Get the intersection point of a line with the surface of the body.org.hipparchus.geometry.euclidean.threed.Vector3D
getCartesianIntersectionPoint(org.hipparchus.geometry.euclidean.threed.Line line, org.hipparchus.geometry.euclidean.threed.Vector3D close, Frame frame, AbsoluteDate date)
Get the intersection point of a line with the surface of the body.double
getEquatorialRadius()
Get the equatorial radius of the body.double
getFlattening()
Get the flattening of the body: f = (a-b)/a.<T extends org.hipparchus.RealFieldElement<T>>
FieldGeodeticPoint<T>getIntersectionPoint(org.hipparchus.geometry.euclidean.threed.FieldLine<T> line, org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> close, Frame frame, FieldAbsoluteDate<T> date)
Get the intersection point of a line with the surface of the body.GeodeticPoint
getIntersectionPoint(org.hipparchus.geometry.euclidean.threed.Line line, org.hipparchus.geometry.euclidean.threed.Vector3D close, Frame frame, AbsoluteDate date)
Get the intersection point of a line with the surface of the body.org.hipparchus.geometry.euclidean.threed.Vector3D
projectToGround(org.hipparchus.geometry.euclidean.threed.Vector3D point, AbsoluteDate date, Frame frame)
Project a point to the ground.TimeStampedPVCoordinates
projectToGround(TimeStampedPVCoordinates pv, Frame frame)
Project a moving point to the ground.void
setAngularThreshold(double angularThreshold)
Set the angular convergence threshold.<T extends org.hipparchus.RealFieldElement<T>>
FieldGeodeticPoint<T>transform(org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> point, Frame frame, FieldAbsoluteDate<T> date)
Transform a Cartesian point to a surface-relative point.GeodeticPoint
transform(org.hipparchus.geometry.euclidean.threed.Vector3D point, Frame frame, AbsoluteDate date)
Transform a Cartesian point to a surface-relative point.<T extends org.hipparchus.RealFieldElement<T>>
org.hipparchus.geometry.euclidean.threed.FieldVector3D<T>transform(FieldGeodeticPoint<T> point)
Transform a surface-relative point to a Cartesian point.org.hipparchus.geometry.euclidean.threed.Vector3D
transform(GeodeticPoint point)
Transform a surface-relative point to a Cartesian point.FieldGeodeticPoint<org.hipparchus.analysis.differentiation.DerivativeStructure>
transform(PVCoordinates point, Frame frame, AbsoluteDate date)
Transform a Cartesian point to a surface-relative point.-
Methods inherited from class org.orekit.bodies.Ellipsoid
getA, getB, getC, getFrame, getPlaneSection, isInside, pointOnLimb
-
-
-
-
Constructor Detail
-
OneAxisEllipsoid
public OneAxisEllipsoid(double ae, double f, Frame bodyFrame)
Simple constructor.Standard values for Earth models can be found in the
Constants
class:Ellipsoid Models model ae (m) f GRS 80 Constants.GRS80_EARTH_EQUATORIAL_RADIUS
Constants.GRS80_EARTH_FLATTENING
WGS84 Constants.WGS84_EARTH_EQUATORIAL_RADIUS
Constants.WGS84_EARTH_FLATTENING
- Parameters:
ae
- equatorial radiusf
- the flattening (f = (a-b)/a)bodyFrame
- body frame related to body shape- See Also:
FramesFactory.getITRF(org.orekit.utils.IERSConventions, boolean)
-
-
Method Detail
-
setAngularThreshold
public void setAngularThreshold(double angularThreshold)
Set the angular convergence threshold.The angular threshold is used both to identify points close to the ellipse axes and as the convergence threshold used to stop the iterations in the
transform(Vector3D, Frame, AbsoluteDate)
method.If this method is not called, the default value is set to 10-12.
- Parameters:
angularThreshold
- angular convergence threshold (rad)
-
getEquatorialRadius
public double getEquatorialRadius()
Get the equatorial radius of the body.- Returns:
- equatorial radius of the body (m)
-
getFlattening
public double getFlattening()
Get the flattening of the body: f = (a-b)/a.- Returns:
- the flattening
-
getBodyFrame
public Frame getBodyFrame()
Get body frame related to body shape.- Specified by:
getBodyFrame
in interfaceBodyShape
- Returns:
- body frame related to body shape
-
getCartesianIntersectionPoint
public org.hipparchus.geometry.euclidean.threed.Vector3D getCartesianIntersectionPoint(org.hipparchus.geometry.euclidean.threed.Line line, org.hipparchus.geometry.euclidean.threed.Vector3D close, Frame frame, AbsoluteDate date)
Get the intersection point of a line with the surface of the body.A line may have several intersection points with a closed surface (we consider the one point case as a degenerated two points case). The close parameter is used to select which of these points should be returned. The selected point is the one that is closest to the close point.
- Parameters:
line
- test line (may intersect the body or not)close
- point used for intersections selectionframe
- frame in which line is expresseddate
- date of the line in given frame- Returns:
- intersection point at altitude zero or null if the line does not intersect the surface
- Since:
- 9.3
-
getIntersectionPoint
public GeodeticPoint getIntersectionPoint(org.hipparchus.geometry.euclidean.threed.Line line, org.hipparchus.geometry.euclidean.threed.Vector3D close, Frame frame, AbsoluteDate date)
Get the intersection point of a line with the surface of the body.A line may have several intersection points with a closed surface (we consider the one point case as a degenerated two points case). The close parameter is used to select which of these points should be returned. The selected point is the one that is closest to the close point.
- Specified by:
getIntersectionPoint
in interfaceBodyShape
- Parameters:
line
- test line (may intersect the body or not)close
- point used for intersections selectionframe
- frame in which line is expresseddate
- date of the line in given frame- Returns:
- intersection point at altitude zero or null if the line does not intersect the surface
-
getCartesianIntersectionPoint
public <T extends org.hipparchus.RealFieldElement<T>> org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> getCartesianIntersectionPoint(org.hipparchus.geometry.euclidean.threed.FieldLine<T> line, org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> close, Frame frame, FieldAbsoluteDate<T> date)
Get the intersection point of a line with the surface of the body.A line may have several intersection points with a closed surface (we consider the one point case as a degenerated two points case). The close parameter is used to select which of these points should be returned. The selected point is the one that is closest to the close point.
- Type Parameters:
T
- type of the field elements- Parameters:
line
- test line (may intersect the body or not)close
- point used for intersections selectionframe
- frame in which line is expresseddate
- date of the line in given frame- Returns:
- intersection point at altitude zero or null if the line does not intersect the surface
- Since:
- 9.3
-
getIntersectionPoint
public <T extends org.hipparchus.RealFieldElement<T>> FieldGeodeticPoint<T> getIntersectionPoint(org.hipparchus.geometry.euclidean.threed.FieldLine<T> line, org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> close, Frame frame, FieldAbsoluteDate<T> date)
Get the intersection point of a line with the surface of the body.A line may have several intersection points with a closed surface (we consider the one point case as a degenerated two points case). The close parameter is used to select which of these points should be returned. The selected point is the one that is closest to the close point.
- Specified by:
getIntersectionPoint
in interfaceBodyShape
- Type Parameters:
T
- type of the field elements- Parameters:
line
- test line (may intersect the body or not)close
- point used for intersections selectionframe
- frame in which line is expresseddate
- date of the line in given frame- Returns:
- intersection point at altitude zero or null if the line does not intersect the surface
-
transform
public org.hipparchus.geometry.euclidean.threed.Vector3D transform(GeodeticPoint point)
Transform a surface-relative point to a Cartesian point.
-
transform
public <T extends org.hipparchus.RealFieldElement<T>> org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> transform(FieldGeodeticPoint<T> point)
Transform a surface-relative point to a Cartesian point.
-
projectToGround
public org.hipparchus.geometry.euclidean.threed.Vector3D projectToGround(org.hipparchus.geometry.euclidean.threed.Vector3D point, AbsoluteDate date, Frame frame)
Project a point to the ground.- Specified by:
projectToGround
in interfaceBodyShape
- Parameters:
point
- point to projectdate
- current dateframe
- frame in which moving point is expressed- Returns:
- ground point exactly at the local vertical of specified point, in the same frame as specified point
- See Also:
BodyShape.projectToGround(TimeStampedPVCoordinates, Frame)
-
projectToGround
public TimeStampedPVCoordinates projectToGround(TimeStampedPVCoordinates pv, Frame frame)
Project a moving point to the ground.- Specified by:
projectToGround
in interfaceBodyShape
- Parameters:
pv
- moving pointframe
- frame in which moving point is expressed- Returns:
- ground point exactly at the local vertical of specified point, in the same frame as specified point
- See Also:
BodyShape.projectToGround(Vector3D, AbsoluteDate, Frame)
-
transform
public GeodeticPoint transform(org.hipparchus.geometry.euclidean.threed.Vector3D point, Frame frame, AbsoluteDate date)
Transform a Cartesian point to a surface-relative point.This method is based on Toshio Fukushima's algorithm which uses Halley's method. transformation from Cartesian to Geodetic Coordinates Accelerated by Halley's Method, Toshio Fukushima, Journal of Geodesy 9(12):689-693, February 2006
Some changes have been added to the original method:
- in order to handle more accurately corner cases near the pole
- in order to handle properly corner cases near the equatorial plane, even far inside the ellipsoid
- in order to handle very flat ellipsoids
-
transform
public <T extends org.hipparchus.RealFieldElement<T>> FieldGeodeticPoint<T> transform(org.hipparchus.geometry.euclidean.threed.FieldVector3D<T> point, Frame frame, FieldAbsoluteDate<T> date)
Transform a Cartesian point to a surface-relative point.This method is based on Toshio Fukushima's algorithm which uses Halley's method. transformation from Cartesian to Geodetic Coordinates Accelerated by Halley's Method, Toshio Fukushima, Journal of Geodesy 9(12):689-693, February 2006
Some changes have been added to the original method:
- in order to handle more accurately corner cases near the pole
- in order to handle properly corner cases near the equatorial plane, even far inside the ellipsoid
- in order to handle very flat ellipsoids
- Specified by:
transform
in interfaceBodyShape
- Type Parameters:
T
- type fo the filed elements- Parameters:
point
- Cartesian pointframe
- frame in which Cartesian point is expresseddate
- date of the computation (used for frames conversions)- Returns:
- point at the same location but as a surface-relative point
-
transform
public FieldGeodeticPoint<org.hipparchus.analysis.differentiation.DerivativeStructure> transform(PVCoordinates point, Frame frame, AbsoluteDate date)
Transform a Cartesian point to a surface-relative point.- Parameters:
point
- Cartesian pointframe
- frame in which Cartesian point is expresseddate
- date of the computation (used for frames conversions)- Returns:
- point at the same location but as a surface-relative point, using time as the single derivation parameter
-
-