public class Ellipsoid extends Object implements IEquatableDefinition
A quadratic surface defined in Cartesian coordinates by the equation:
(x / a)^2 + (y / b)^2 + (z / c)^2 = 1
Constructor and Description 

Ellipsoid()
Initializes an ellipsoid as a unit sphere.

Ellipsoid(Cartesian semiaxisLengths)
Initializes an ellipsoid as a scalene ellipsoid.

Ellipsoid(Cartesian semiaxisLengths,
double centerTolerance,
double surfaceTolerance)
Initializes an ellipsoid as a scalene ellipsoid.

Ellipsoid(double radius)
Initializes an ellipsoid as a sphere.

Ellipsoid(double centerTolerance,
double surfaceTolerance)
Initializes an ellipsoid as a unit sphere.

Ellipsoid(double equatorialRadius,
double polarRadius,
AxisIndicator polarAxis)
Initializes an ellipsoid as a spheroid.

Ellipsoid(double equatorialRadius,
double polarRadius,
AxisIndicator polarAxis,
double centerTolerance,
double surfaceTolerance)
Initializes an ellipsoid as a spheroid.

Ellipsoid(double x,
double y,
double z)
Initializes an ellipsoid as a scalene ellipsoid.

Ellipsoid(double x,
double y,
double z,
double centerTolerance,
double surfaceTolerance)
Initializes an ellipsoid as a scalene ellipsoid.

Modifier and Type  Method and Description 

double[] 
apparentAngularSize(Cartesian point)
Provides the minimum and maximum apparent angular size of the ellipsoid, as
viewed from the provided point.

Cartographic 
cartesianToCartographic(Cartesian position)
Converts the motion given in terms of cartesian coordinates to motion in cartographic coordinates.

Motion1<Cartographic> 
cartesianToCartographic(Motion1<Cartesian> cartesianMotion,
int order)
Converts the motion given in terms of cartesian coordinates to motion in cartographic coordinates.

Cartesian 
cartographicToCartesian(Cartographic position)
Converts the motion given in terms of planetodetic cartographic coordinates to motion in cartesian coordinates.

Cartesian 
cartographicToCartesian(double longitude,
double latitude)
Converts the specified planetodetic surface location into a cartesian vector in the fixed frame of the ellipsoid.

Motion1<Cartesian> 
cartographicToCartesian(Motion1<Cartographic> cartographicMotion,
int order)
Converts the motion given in terms of planetodetic cartographic coordinates to motion in cartesian coordinates.

UniversalPolarStereographic 
cartographicToUniversalPolarStereographic(Cartographic coordinates)
Converts the location given in terms of planetodetic cartographic coordinates to Universal Polar Stereographic (UPS) coordinates.

UniversalPolarStereographic 
cartographicToUniversalPolarStereographic(double longitude,
double latitude)
Converts the location given in terms of planetodetic longitude and latitude to Universal Polar Stereographic (UPS) coordinates.

UniversalTransverseMercator 
cartographicToUniversalTransverseMercator(Cartographic coordinates)
Converts the location given in terms of planetodetic cartographic coordinates to Universal Transverse Mercator (UTM) coordinates.

UniversalTransverseMercator 
cartographicToUniversalTransverseMercator(double longitude,
double latitude)
Converts the location given in terms of planetodetic longitude and latitude to Universal Transverse Mercator (UTM) coordinates.

double 
computeApproximateHeight(Cartesian position)
Compute an approximate value of the height above the surface.

double 
computeSurfaceArea(CartographicExtent extent)
Computes an approximation of the surface area of a given cartographic extent on the surface of this ellipsoid
using Gauss Legendre 10th order quadrature.

double 
computeSurfaceArea(double minLongitude,
double minLatitude,
double maxLongitude,
double maxLatitude)
Computes an approximation of the surface area of a given section of the surface of an ellipsoid using
Gauss Legendre 10th order quadrature.

UnitQuaternion 
eastNorthUpTransformation(Cartesian surfacePosition)
Returns the quaternion transformation between the xyz axes of the ellipsoid to the axes oriented to the cartographic
eastnorthup axes at the given position on the surface.

double 
ellipsoidSeparationDistance(Ellipsoid other,
Cartesian centerPointsDisplacement,
Matrix3By3 thisToOtherRotation)
If the given
Ellipsoid does not intersect with this ellipsoid this method returns the minimum separation
between the surfaces of the two ellipsoids. 
double 
ellipsoidSeparationDistance(Ellipsoid other,
Cartesian centerPointsDisplacement,
Matrix3By3 thisToOtherRotation,
Cartesian[] pointOnThisSurface,
Cartesian[] pointOnOtherSurface)
If the given
Ellipsoid does not intersect with this ellipsoid this method returns the minimum separation
between the surfaces of the two ellipsoids. 
double 
getCenterTolerance()
Gets the numerical tolerance used to determine if a point is located near the center of the ellipsoid.

int 
getDefinitionHashCode()
Gets a hash code representing the definition of this object.

double 
getDegreeOfObstruction(Cartesian thisFixed,
Cartesian otherFixed)
Gets the obstruction value given two positions.

double 
getDegreeOfObstruction(Cartesian thisFixed,
Cartesian otherFixed,
double[] nearDistance)
Gets the obstruction value given two positions.

EllipsoidType 
getEllipsoidType()
Gets the type of the ellipsoid based on the semiaxis lengths.

Cartesian 
getSemiaxisLengths()
Gets the semiaxis lengths.

double 
getSemimajorAxisLength()
Gets the largest semiaxis length.

double 
getSemiminorAxisLength()
Gets the smallest semiaxis length.

double 
getSurfaceTolerance()
Gets the numerical tolerance used to determine if a point is located on the surface of the ellipsoid.

double 
getVolume()
Gets the volume of the ellipsoid.

Cartesian 
gradient(Cartesian position)
The gradient of the ellipsoid evaluated at the provided position.

double 
grazingAltitude(Cartesian initial,
Cartesian _final)
Provides the nearest distance between the ellipsoid and the line segment
between the initial and final points.

double 
grazingAltitude(Cartesian position,
UnitCartesian direction)
Provides the nearest distance between the ellipsoid and the line segment
from the provided position and along the indicated direction.

double 
grazingAltitude(Cartographic initial,
Cartographic _final)
Provides the nearest distance between the ellipsoid and the line segment
from the provided location and along the indicated direction.

double 
grazingAltitude(Cartographic location,
UnitCartesian direction)
Provides the nearest distance between the ellipsoid and the line segment
from the provided location and along the indicated direction.

Cartographic 
grazingAltitudeLocation(Cartesian initial,
Cartesian _final)
Provides the point on the line segment between the initial and final points
which is nearest to the ellipsoid.

Cartographic 
grazingAltitudeLocation(Cartesian position,
UnitCartesian direction)
Provides the point on the line segment from the provided position and along
the indicated direction which is nearest to the ellipsoid.

Cartographic 
grazingAltitudeLocation(Cartographic initial,
Cartographic _final)
Provides the point on the line segment between the initial and final points
which is nearest to the ellipsoid.

Cartographic 
grazingAltitudeLocation(Cartographic location,
UnitCartesian direction)
Provides the point on the line segment from the provided location and along
the indicated direction which is nearest to the ellipsoid.

Cartesian[] 
grazingAngleLocations(Cartesian point,
UnitCartesian direction)
Provides the two points on the limb of the ellipsoid with the smallest and largest apparent
angular separation with respect to the indicated direction, as viewed from the provided
point.

double[] 
grazingAngles(Cartesian point,
UnitCartesian direction)
Provides the angles from the indicated direction to the two points on the limb
of the ellipsoid with the smallest and largest apparent angular separation, as
viewed from the provided point.

double[] 
intersections(Cartesian position,
UnitCartesian direction)
Computes the intersection of the line of sight vector emanating from a given external point with the ellipsoid.

boolean 
isAtCenter(Cartesian position)
Gets a value indicating if the provided position is within the
CenterTolerance (get ) of the center of the ellipsoid. 
boolean 
isAtOrBeneathSurface(Cartesian position)
Gets a value indicating if the provided position is within the
SurfaceTolerance (get ) of the surface of the ellipsoid,
or is beneath the surface of the ellipsoid. 
boolean 
isAtSurface(Cartesian position)
Gets a value indicating if the provided position is within the
SurfaceTolerance (get ) of the surface of the ellipsoid. 
boolean 
isSameDefinition(Ellipsoid other)
Determines if this object has the same definition as another object.

boolean 
isSameDefinition(Object other)
Determines if this object has the same definition as another object.

double 
norm(Cartesian position)
The ellipsoid norm evaluated at the provided position.

double 
normSquared(Cartesian position)
The square of the ellipsoid
Ellipsoid.norm(agi.foundation.coordinates.Cartesian) evaluated at the provided position. 
UnitQuaternion 
northEastDownTransformation(Cartesian surfacePosition)
Returns the quaternion transformation between the xyz axes of the ellipsoid to the axes oriented to the cartographic
northeastdown axes at the given position on the surface.

double 
pointSeparationDistance(Cartesian centerToPoint)
If the given
Cartesian does not lie within this ellipsoid this method returns the minimum separation
between the this ellipsoid on the given point. 
double 
pointSeparationDistance(Cartesian centerToPoint,
Cartesian[] pointOnSurface)
If the given
Cartesian does not lie within this ellipsoid this method returns the minimum separation
between the this ellipsoid on the given point. 
Cartesian 
radialProjection(Cartesian position)
Computes the radial projection of the position vector onto the surface of the ellipsoid.

double 
surfaceDistance(Cartographic first,
Cartographic second)
Computes the shortest distance as measured on the surface of the ellipsoid between two planetodetic cartographic positions.

static UnitCartesian 
surfaceNormal(Cartographic position)
The unit Cartesian vector directed along the surface normal at the provided cartographic position.

static UnitCartesian 
surfaceNormal(double longitude,
double latitude)
The unit Cartesian vector directed along the surface normal at the provided cartographic longitude and latitude.

UnitCartesian 
surfaceNormalMotion(Cartesian surfacePosition)
Converts the position given in terms of a surface point to the surface normal vector.

Motion2<UnitCartesian,Cartesian> 
surfaceNormalMotion(Motion1<Cartesian> surfaceMotion,
int order)
Converts the motion given in terms of a surface point to motion of the surface normal vector.

Cartographic 
surfacePosition(Cartographic initial,
double heading,
double distance)
Computes the location of a second surface point along the geodesic passing through the provided
surface point having the indicated heading at the provided surface point and located at the
specified distance from the provided surface point.

Cartesian 
surfaceProjection(Cartesian position)
Computes the projection of the cartesian position onto the ellipsoid surface.

Cartesian 
surfaceProjection(Cartographic position)
Computes the projection of the cartographic position onto the ellipsoid surface.

Motion1<Cartesian> 
surfaceProjection(Motion1<Cartesian> motion,
int order)
Computes the projection of the cartesian motion onto the ellipsoid surface.

Motion1<Cartesian> 
surfaceProjectionCartographic(Motion1<Cartographic> cartographicMotion,
int order)
Computes the projection of the cartographic motion onto the ellipsoid surface.

Cartesian[] 
tangents(Cartesian position,
UnitCartesian normal)
From the indicated position, provides the points of tangency on an ellipsoid which also lie in
the plane defined by the indicated normal.

Cartesian[] 
tangents(Cartesian position,
UnitCartesian axis,
double halfAngle)
From the indicated position, provides the points of tangency on an ellipsoid which also lie on an
axisymmetric cone defined by the indicated axis and half angle.

boolean 
tangentTotal(Cartesian sensorPosition,
UnitCartesian sensorHeading,
double halfAngle)
Determines whether the cone emanating from sensor at the given position and with the given
heading and half angle lies completely tangent to the Ellipsoid.

Cartographic 
universalPolarStereographicToCartographic(PoleIndicator hemisphere,
double easting,
double northing)
Converts the location given in terms of Universal Polar Stereographic (UPS) hemisphere, easting, and northing
to planetodetic cartographic coordinates.

Cartographic 
universalPolarStereographicToCartographic(UniversalPolarStereographic coordinates)
Converts the location given in terms of Universal Polar Stereographic (UPS) coordinates
to planetodetic cartographic coordinates.

Cartographic 
universalTransverseMercatorToCartographic(int zone,
PoleIndicator hemisphere,
double easting,
double northing)
Converts the location given in terms of Universal Transverse Mercator (UTM) zone, hemisphere, easting, and northing
to planetodetic cartographic coordinates.

Cartographic 
universalTransverseMercatorToCartographic(UniversalTransverseMercator coordinates)
Converts the location given in terms of Universal Transverse Mercator (UTM) coordinates
to planetodetic cartographic coordinates.

UnitQuaternion 
upEastNorthTransformation(Cartesian surfacePosition)
Returns the quaternion transformation between the xyz axes of the ellipsoid to the axes oriented to the cartographic
upeastnorth axes at the given position on the surface.

public Ellipsoid(double centerTolerance, double surfaceTolerance)
centerTolerance
 The numerical tolerance used to determine if a point is located
at the center of the ellipsoid.surfaceTolerance
 The numerical tolerance used to determine if a point is located
on the surface of the ellipsoid.ArgumentOutOfRangeException
 Thrown when the parameters centerTolerance
or surfaceTolerance
are less than or equal to 0.public Ellipsoid()
public Ellipsoid(double x, double y, double z, double centerTolerance, double surfaceTolerance)
x
 The semiaxis length along the xaxis of the ellipsoid.y
 The semiaxis length along the yaxis of the ellipsoid.z
 The semiaxis length along the zaxis of the ellipsoid.centerTolerance
 The numerical tolerance used to determine if a point is located
at the center of the ellipsoid.surfaceTolerance
 The numerical tolerance used to determine if a point is located
on the surface of the ellipsoid.ArgumentOutOfRangeException
 Thrown when the parameters x
, y
, or z
are less than or equal to 0.ArgumentOutOfRangeException
 Thrown when the parameters centerTolerance
or surfaceTolerance
are less than or equal to 0.public Ellipsoid(double x, double y, double z)
x
 The semiaxis length along the xaxis of the ellipsoid.y
 The semiaxis length along the yaxis of the ellipsoid.z
 The semiaxis length along the zaxis of the ellipsoid.ArgumentOutOfRangeException
 Thrown when the parameters x
, y
, or z
are less than or equal to 0.public Ellipsoid(@Nonnull Cartesian semiaxisLengths, double centerTolerance, double surfaceTolerance)
semiaxisLengths
 The semiaxis lengths along the x, y, and z axes of the ellipsoid.centerTolerance
 The numerical tolerance used to determine if a point is located
at the center of the ellipsoid.surfaceTolerance
 The numerical tolerance used to determine if a point is located
on the surface of the ellipsoid.ArgumentOutOfRangeException
 Thrown when the parameter semiaxisLengths
has an
X
(get
), Y
(get
), or Z
(get
) component that
is less than or equal to 0.ArgumentOutOfRangeException
 Thrown when the parameters centerTolerance
or surfaceTolerance
are less than or equal to 0.public Ellipsoid(@Nonnull Cartesian semiaxisLengths)
semiaxisLengths
 The semiaxis lengths along the x, y, and z axes of the ellipsoid.ArgumentOutOfRangeException
 Thrown when the parameter semiaxisLengths
has an
X
(get
), Y
(get
), or Z
(get
) component that
is less than or equal to 0.public Ellipsoid(double equatorialRadius, double polarRadius, @Nonnull AxisIndicator polarAxis, double centerTolerance, double surfaceTolerance)
If the equatorial radius is larger than the polar radius, the ellipsoid is an oblate spheroid. If the equatorial radius is smaller than the polar radius, the ellipsoid is a prolate spheroid.
The conversions between cartesian and cartographic coordinates define longitude measured in the xyplane. Therefore, the zaxis will, in general, be indicated as the polar axis.
equatorialRadius
 The lengths of the two equal semiaxis.polarRadius
 The length of the semiaxis which is unequal to the rest.polarAxis
 The axis which corresponds to the semiaxis which is unequal to the rest.centerTolerance
 The numerical tolerance used to determine if a point is located
at the center of the ellipsoid.surfaceTolerance
 The numerical tolerance used to determine if a point is located
on the surface of the ellipsoid.ArgumentOutOfRangeException
 Thrown when the parameters equatorialRadius
or polarRadius
are
less than or equal to 0.ArgumentOutOfRangeException
 Thrown when the parameters centerTolerance
or surfaceTolerance
are less than or equal to 0.public Ellipsoid(double equatorialRadius, double polarRadius, @Nonnull AxisIndicator polarAxis)
If the equatorial radius is larger than the polar radius, the ellipsoid is an oblate spheroid. If the equatorial radius is smaller than the polar radius, the ellipsoid is a prolate spheroid.
The conversions between cartesian and cartographic coordinates define longitude measured in the xyplane. Therefore, the zaxis will, in general, be indicated as the polar axis.
equatorialRadius
 The lengths of the two equal semiaxis.polarRadius
 The length of the semiaxis which is unequal to the rest.polarAxis
 The axis which corresponds to the semiaxis which is unequal to the rest.ArgumentOutOfRangeException
 Thrown when the parameters equatorialRadius
or polarRadius
are
less than or equal to 0.public Ellipsoid(double radius)
radius
 The radius of the sphere.ArgumentOutOfRangeException
 Thrown when the parameter radius
is less than or equal to 0.public final boolean isSameDefinition(Ellipsoid other)
This method is very similar to Object.equals(Object)
except that it explicitly considers
the "definitions" of the two objects for objects that do not typically act like values. The definition of
an object typically includes all of the fields of the object.
other
 The other instance to compare to this one.true
if this object has the same definition as the specified one.
false
if the other object is null
, a different type
than this one, or if this object and the specified one have different definitions.public final boolean isSameDefinition(Object other)
This method is very similar to Object.equals(Object)
except that it explicitly considers
the "definitions" of the two objects for objects that do not typically act like values. The definition of
an object typically includes all of the fields of the object.
isSameDefinition
in interface IEquatableDefinition
other
 The other instance to compare to this one.true
if this object has the same definition as the specified one.
false
if the other object is null
, a different type
than this one, or if this object and the specified one have different definitions.public final int getDefinitionHashCode()
This method is very similar to Object.hashCode()
except that it explicitly includes
the "definition" of the object even if the object does not typically act like a value. The definition of
an object typically includes all of the fields of the object. The value returned by this method should
NOT change. This means that two objects for which Ellipsoid.isSameDefinition(agi.foundation.geometry.shapes.Ellipsoid)
returns true
will not necessarily have the same hash code if one or the other was changed after the hash code was first
obtained.
getDefinitionHashCode
in interface IEquatableDefinition
@Nonnull public final EllipsoidType getEllipsoidType()
EllipsoidType
public final double getCenterTolerance()
public final boolean isAtCenter(@Nonnull Cartesian position)
CenterTolerance
(get
) of the center of the ellipsoid.
The CenterTolerance
(get
) is expressed as a percentage with respect to the unit sphere representing the scaled ellipsoid.position
 The position.true
if the position is within tolerance of the center of the ellipsoid; otherwise false
.public final double getSurfaceTolerance()
public final boolean isAtSurface(@Nonnull Cartesian position)
SurfaceTolerance
(get
) of the surface of the ellipsoid.position
 The position.true
if the position is within tolerance of the surface of the ellipsoid; otherwise false
.public final boolean isAtOrBeneathSurface(@Nonnull Cartesian position)
SurfaceTolerance
(get
) of the surface of the ellipsoid,
or is beneath the surface of the ellipsoid.position
 The position.true
if the position is within tolerance of the surface of the ellipsoid, or beneath it; otherwise false
.public final double getSemimajorAxisLength()
public final double getSemiminorAxisLength()
public final double getVolume()
public final double normSquared(@Nonnull Cartesian position)
Ellipsoid.norm(agi.foundation.coordinates.Cartesian)
evaluated at the provided position.position
 The position.public final double norm(@Nonnull Cartesian position)
position
 The position.@Nonnull public final Cartesian gradient(@Nonnull Cartesian position)
position
 The position.@Nonnull public final Cartesian[] tangents(@Nonnull Cartesian position, @Nonnull UnitCartesian normal)
position
 The reference point.normal
 The normal to the plane passing through the reference point.@Nonnull public final Cartesian[] tangents(@Nonnull Cartesian position, @Nonnull UnitCartesian axis, double halfAngle)
position
 The reference point.axis
 The axis of the cone.halfAngle
 The half angle of the cone.public final boolean tangentTotal(@Nonnull Cartesian sensorPosition, @Nonnull UnitCartesian sensorHeading, double halfAngle)
sensorPosition
 The position of the sensor.sensorHeading
 The heading of the sensor.halfAngle
 The half angle of the sensor cone.@Nonnull public final Cartographic grazingAltitudeLocation(@Nonnull Cartesian initial, @Nonnull Cartesian _final)
If the line segment passes through the ellipsoid then the height of the returned Cartographic
will be
a negative value representing the maximum depth required to reach the surface.
initial
 The initial point of the line segment._final
 The final point of the line segment.@Nonnull public final Cartographic grazingAltitudeLocation(@Nonnull Cartographic initial, @Nonnull Cartographic _final)
If the line segment passes through the ellipsoid then the height of the returned Cartographic
will be
a negative value representing the maximum depth required to reach the surface.
initial
 The initial planetodetic point of the line segment._final
 The final planetodetic point of the line segment.public final double grazingAltitude(@Nonnull Cartesian initial, @Nonnull Cartesian _final)
If the line segment passes through the ellipsoid then the altitude will be a negative value representing the maximum depth required to reach the surface.
initial
 The initial point of the line segment._final
 The final point of the line segment.public final double grazingAltitude(@Nonnull Cartographic initial, @Nonnull Cartographic _final)
If the line segment passes through the ellipsoid then the altitude will be a negative value representing the maximum depth required to reach the surface.
initial
 The initial planetodetic point of the line segment._final
 The final planetodetic point of the line segment.@Nonnull public final Cartographic grazingAltitudeLocation(@Nonnull Cartographic location, @Nonnull UnitCartesian direction)
If the line segment passes through the ellipsoid then the height of the returned Cartographic
will be
a negative value representing the maximum depth required to reach the surface.
location
 The planetodetic position exterior to the ellipsoid.direction
 The reference direction.public final double grazingAltitude(@Nonnull Cartographic location, @Nonnull UnitCartesian direction)
If the line segment passes through the ellipsoid then the altitude will be a negative value representing the maximum depth required to reach the surface.
location
 The planetodetic position exterior to the ellipsoid.direction
 The reference direction.@Nonnull public final Cartographic grazingAltitudeLocation(@Nonnull Cartesian position, @Nonnull UnitCartesian direction)
If the line segment passes through the ellipsoid then the height of the returned Cartographic
will be
a negative value representing the maximum depth required to reach the surface.
position
 The position exterior to the ellipsoid.direction
 The reference direction.public final double grazingAltitude(@Nonnull Cartesian position, @Nonnull UnitCartesian direction)
If the line segment passes through the ellipsoid then the altitude will be a negative value representing the maximum depth required to reach the surface.
position
 The position exterior to the ellipsoid.direction
 The reference direction.@Nonnull public final Cartesian[] grazingAngleLocations(@Nonnull Cartesian point, @Nonnull UnitCartesian direction)
point
 The position exterior to the ellipsoid.direction
 The reference direction.Ellipsoid.grazingAngles(agi.foundation.coordinates.Cartesian, agi.foundation.coordinates.UnitCartesian)
@Nonnull public final double[] grazingAngles(@Nonnull Cartesian point, @Nonnull UnitCartesian direction)
point
 The position exterior to the ellipsoid.direction
 The reference direction.Ellipsoid.grazingAngleLocations(agi.foundation.coordinates.Cartesian, agi.foundation.coordinates.UnitCartesian)
@Nonnull public final double[] apparentAngularSize(@Nonnull Cartesian point)
point
 The position exterior to the ellipsoid.Ellipsoid.grazingAngleLocations(agi.foundation.coordinates.Cartesian, agi.foundation.coordinates.UnitCartesian)
@Nonnull public final double[] intersections(@Nonnull Cartesian position, @Nonnull UnitCartesian direction)
The length of the array of distances indicates how many points of intersection exist:
In the case of two intersections, the distances are ordered from most negative (i.e. "furthest behind") to most positive (i.e. "furthest before"). If the two distances are equal, the points of intersection indicate a single point of tangency to the ellipsoid.
position
 The reference point for the direction.direction
 The direction along which the intersections are to be determined.@Nonnull public final Cartesian radialProjection(@Nonnull Cartesian position)
The projection is onto the side of the ellipsoid surface closest to the provided point.
position
 The position vector.@Nonnull public final Cartesian surfaceProjection(@Nonnull Cartesian position)
position
 The cartesian position.ArgumentException
 Thrown when the position
parameter is near the center of the ellipsoid.
Use the Ellipsoid.isAtCenter(agi.foundation.coordinates.Cartesian)
member to test any such points if they will exist in the domain
of the calling function.@Nonnull public final Motion1<Cartesian> surfaceProjection(@Nonnull Motion1<Cartesian> motion, int order)
motion
 The cartesian motion.order
 The order of the highest derivative to project. To project just the position, pass 0 for this value. To project velocity as well, pass 1.ArgumentException
 Thrown when the Value
(get
) is near the center of the ellipsoid.
Use the Ellipsoid.isAtCenter(agi.foundation.coordinates.Cartesian)
member to test any such points if they will exist in the domain
of the calling function.@Nonnull public final Cartesian surfaceProjection(@Nonnull Cartographic position)
position
 The planetodetic cartographic position.@Nonnull public final Motion1<Cartesian> surfaceProjectionCartographic(@Nonnull Motion1<Cartographic> cartographicMotion, int order)
cartographicMotion
 The planetodetic cartographic motion.order
 The order of the highest derivative to project. To project just the position, pass 0 for this value. To convert velocity as well, pass 1.@Nonnull public final UniversalTransverseMercator cartographicToUniversalTransverseMercator(double longitude, double latitude)
The planetodetic coordinates must be in a fixed reference frame centered on the center of mass of this ellipsoid.
longitude
 The planetodetic longitude in radians.latitude
 The planetodetic latitude in radians.@Nonnull public final UniversalTransverseMercator cartographicToUniversalTransverseMercator(@Nonnull Cartographic coordinates)
The planetodetic cartographic coordinates must be in a fixed reference frame centered on the center of mass of this ellipsoid.
coordinates
 The planetodetic cartographic coordinates to convert.@Nonnull public final Cartographic universalTransverseMercatorToCartographic(int zone, @Nonnull PoleIndicator hemisphere, double easting, double northing)
zone
 The longitude zone indicator.hemisphere
 The hemisphere indicator.easting
 The eastward distance of the location into the zone.northing
 The northward distance of the location into the zone.@Nonnull public final Cartographic universalTransverseMercatorToCartographic(@Nonnull UniversalTransverseMercator coordinates)
coordinates
 The UTM coordinates to convert.@Nonnull public final UniversalPolarStereographic cartographicToUniversalPolarStereographic(double longitude, double latitude)
The planetodetic coordinates must be in a fixed reference frame centered on the center of mass of this ellipsoid.
longitude
 The planetodetic longitude in radians.latitude
 The planetodetic latitude in radians.@Nonnull public final UniversalPolarStereographic cartographicToUniversalPolarStereographic(@Nonnull Cartographic coordinates)
The planetodetic cartographic coordinates must be in a fixed reference frame centered on the center of mass of this ellipsoid.
coordinates
 The planetodetic cartographic coordinates to convert.@Nonnull public final Cartographic universalPolarStereographicToCartographic(@Nonnull PoleIndicator hemisphere, double easting, double northing)
hemisphere
 The hemisphere indicator.easting
 The eastward distance of the location into the zone.northing
 The northward distance of the location into the zone.@Nonnull public final Cartographic universalPolarStereographicToCartographic(@Nonnull UniversalPolarStereographic coordinates)
coordinates
 The UPS coordinates to convert.@Nonnull public final Cartesian cartographicToCartesian(@Nonnull Cartographic position)
The planetodetic cartographic coordinates must be in a fixed reference frame centered on the center of mass of this ellipsoid.
position
 The planetodetic cartographic coordinates to convert.@Nonnull public final Motion1<Cartesian> cartographicToCartesian(@Nonnull Motion1<Cartographic> cartographicMotion, int order)
The cartographic position and velocity must be in a fixed reference frame centered on the center of mass of this ellipsoid.
cartographicMotion
 The planetodetic cartographic motion to convert.order
 The order of the highest derivative to convert. To convert just the position, pass 0 for this value. To convert velocity as well, pass 1.@Nonnull public final Cartesian cartographicToCartesian(double longitude, double latitude)
longitude
 The planetodetic longitude, in radians.latitude
 The planetodetic latitude, in radians.@Nonnull public final Cartographic cartesianToCartographic(@Nonnull Cartesian position)
The cartesian coordinates must be in a fixed reference frame centered on the center of mass of this ellipsoid.
position
 The cartesian coordinates to convert.ArgumentException
 Thrown when the position
parameter is near the center of the ellipsoid.
Use the Ellipsoid.isAtCenter(agi.foundation.coordinates.Cartesian)
member to test any such points if they will exist in the domain
of the calling function.@Nonnull public final Motion1<Cartographic> cartesianToCartographic(@Nonnull Motion1<Cartesian> cartesianMotion, int order)
The cartesian position and velocity must be in a fixed reference frame centered on the center of mass of this ellipsoid.
cartesianMotion
 The cartesian motion to convert.order
 The order of the highest derivative to convert. To convert just the position, pass 0 for this value. To convert velocity as well, pass 1.ArgumentException
 Thrown when the Value
(get
) is near the center of the ellipsoid.
Use the Ellipsoid.isAtCenter(agi.foundation.coordinates.Cartesian)
member to test any such points if they will exist in the domain
of the calling function.@Nonnull public static UnitCartesian surfaceNormal(double longitude, double latitude)
longitude
 The longitude coordinate measured from the prime meridian about the zaxis.latitude
 The planetodetic latitude coordinate measured from the xy plane to the surface normal.@Nonnull public static UnitCartesian surfaceNormal(@Nonnull Cartographic position)
position
 The cartographic (planetodetic) position.public final double surfaceDistance(@Nonnull Cartographic first, @Nonnull Cartographic second)
Since the distance is measured on the surface of the ellipsoid, the height coordinate information is ignored.
first
 The initial planetodetic cartographic position.second
 The final planetodetic cartographic position.UnsupportedCaseException
 The scalene case of a geodesic ellipsoid is not currently modeled and will be in a future release.@Nonnull public final Cartographic surfacePosition(@Nonnull Cartographic initial, double heading, double distance)
Since the distance is measured on the surface of the ellipsoid, the height coordinate information is ignored.
initial
 The initial planetodetic surface point.heading
 The initial heading.distance
 The surface distance separating the two surface points.UnsupportedCaseException
 The scalene case of a geodesic ellipsoid is not currently modeled and will be in a future release.@Nonnull public final UnitCartesian surfaceNormalMotion(@Nonnull Cartesian surfacePosition)
The surfacePosition
must be in a fixed reference frame
centered on the center of mass of this ellipsoid and must be the motion of a surface point.
surfacePosition
 The position of the surface point.@Nonnull public final Motion2<UnitCartesian,Cartesian> surfaceNormalMotion(@Nonnull Motion1<Cartesian> surfaceMotion, int order)
The surfaceMotion
must be in a fixed reference frame
centered on the center of mass of this ellipsoid and must be the motion of a surface point.
surfaceMotion
 The motion of the surface point.order
 The order of the highest derivative to convert. To convert just the position, pass 0 for this value. To convert velocity as well, pass 1.@Nonnull public final UnitQuaternion northEastDownTransformation(@Nonnull Cartesian surfacePosition)
surfacePosition
 The position of interest on the surface of the ellipsoid.@Nonnull public final UnitQuaternion upEastNorthTransformation(@Nonnull Cartesian surfacePosition)
surfacePosition
 The position of interest on the surface of the ellipsoid.@Nonnull public final UnitQuaternion eastNorthUpTransformation(@Nonnull Cartesian surfacePosition)
surfacePosition
 The position of interest on the surface of the ellipsoid.public final double computeSurfaceArea(@Nonnull CartographicExtent extent)
extent
 The extent of the region to compute.ArgumentNullException
 Thrown when extent
is null
.public final double computeSurfaceArea(double minLongitude, double minLatitude, double maxLongitude, double maxLatitude)
minLongitude
 The westmost longitude which bounds the region.minLatitude
 The southmost latitude which bounds the region.maxLongitude
 The eastmost longitude which bounds the region.maxLatitude
 The northmost latitude which bounds the region.public final double computeApproximateHeight(@Nonnull Cartesian position)
In general, for Oblate Spheroids, this will be faster than calling Ellipsoid.cartesianToCartographic(Cartesian)
while providing a height which is still extremely close to the true value.
position
 The position in the fixed frame of the shape.public final double ellipsoidSeparationDistance(Ellipsoid other, @Nonnull Cartesian centerPointsDisplacement, @Nonnull Matrix3By3 thisToOtherRotation)
Ellipsoid
does not intersect with this ellipsoid this method returns the minimum separation
between the surfaces of the two ellipsoids. If the ellipsoids do intersect, the resulting negative separation is the
depth that the other ellipsoid intersects into this ellipsoid (calculated as the distance between the two points on the ellipsoid
chosen in the same manner as in the nonintersecting case).other
 The method finds the separation from the calling ellipsoid and this parameter ellipsoid.centerPointsDisplacement
 The vector from the center of this ellipsoid to the center of the other
ellipsoid,
in the local frame of this ellipsoid.thisToOtherRotation
 The rotation matrix which represents the orientation of the other
ellipsoid with respect to this one,
corresponding to the result of GetAxesTransformation
where this is the 'from' axes and the other axes is 'to'.public final double ellipsoidSeparationDistance(@Nonnull Ellipsoid other, @Nonnull Cartesian centerPointsDisplacement, @Nonnull Matrix3By3 thisToOtherRotation, @Nonnull Cartesian[] pointOnThisSurface, @Nonnull Cartesian[] pointOnOtherSurface)
Ellipsoid
does not intersect with this ellipsoid this method returns the minimum separation
between the surfaces of the two ellipsoids. If the ellipsoids do intersect, the resulting negative separation is the
depth that the other ellipsoid intersects into this ellipsoid (calculated as the distance between the two points on the ellipsoid
chosen in the same manner as in the nonintersecting case).other
 The method finds the separation from the calling ellipsoid and this parameter ellipsoid.centerPointsDisplacement
 The vector from the center of this ellipsoid to the center of the other
ellipsoid,
in the local frame of this ellipsoid.thisToOtherRotation
 The rotation matrix which represents the orientation of the other
ellipsoid with respect to this one,
corresponding to the result of GetAxesTransformation
where this is the 'from' axes and the other axes is 'to'.pointOnThisSurface
 The location on this ellipsoid's surface, in its body frame, which was determined to be the closest
point to the other ellipsoid.pointOnOtherSurface
 The location on the other ellipsoid's surface, in its body frame, which was determined to be the closest
point to the this ellipsoid.public final double pointSeparationDistance(@Nonnull Cartesian centerToPoint)
Cartesian
does not lie within this ellipsoid this method returns the minimum separation
between the this ellipsoid on the given point. If the point is within the ellipsoid do intersect, the resulting negative separation is the
depth that the point lies within this ellipsoid's surface.centerToPoint
 The vector from the center of this ellipsoid to the point,
in the local frame of this ellipsoid.public final double pointSeparationDistance(@Nonnull Cartesian centerToPoint, @Nonnull Cartesian[] pointOnSurface)
Cartesian
does not lie within this ellipsoid this method returns the minimum separation
between the this ellipsoid on the given point. If the point is within the ellipsoid do intersect, the resulting negative separation is the
depth that the point lies within this ellipsoid's surface.centerToPoint
 The vector from the center of this ellipsoid to the point,
in the local frame of this ellipsoid.pointOnSurface
 The location on this ellipsoid's surface, in its body frame, which was determined to be
closest to the given point.public final double getDegreeOfObstruction(@Nonnull Cartesian thisFixed, @Nonnull Cartesian otherFixed)
thisFixed
 The first position in a reference frame fixed to the shape.otherFixed
 The second position in a reference frame fixed to the shape.public final double getDegreeOfObstruction(@Nonnull Cartesian thisFixed, @Nonnull Cartesian otherFixed, @Nonnull double[] nearDistance)
thisFixed
 The first position in a reference frame fixed to the shape.otherFixed
 The second position in a reference frame fixed to the shape.nearDistance
 Outputs the distance along the relative vector at which that vector is closest to this Ellipsoid
.