Class 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
    • 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 interface BodyShape
        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 selection
        frame - frame in which line is expressed
        date - 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 interface BodyShape
        Parameters:
        line - test line (may intersect the body or not)
        close - point used for intersections selection
        frame - frame in which line is expressed
        date - 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 selection
        frame - frame in which line is expressed
        date - 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 interface BodyShape
        Type Parameters:
        T - type of the field elements
        Parameters:
        line - test line (may intersect the body or not)
        close - point used for intersections selection
        frame - frame in which line is expressed
        date - 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.
        Specified by:
        transform in interface BodyShape
        Parameters:
        point - surface-relative point
        Returns:
        point at the same location but as 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.
        Specified by:
        transform in interface BodyShape
        Type Parameters:
        T - type fo the filed elements
        Parameters:
        point - surface-relative point
        Returns:
        point at the same location but as 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 interface BodyShape
        Parameters:
        point - point to project
        date - current date
        frame - 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)
      • 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

        Specified by:
        transform in interface BodyShape
        Parameters:
        point - Cartesian point
        frame - frame in which Cartesian point is expressed
        date - date of the computation (used for frames conversions)
        Returns:
        point at the same location but as a surface-relative point
      • 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 interface BodyShape
        Type Parameters:
        T - type fo the filed elements
        Parameters:
        point - Cartesian point
        frame - frame in which Cartesian point is expressed
        date - 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 point
        frame - frame in which Cartesian point is expressed
        date - 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