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 x-y-z axes of the ellipsoid to the axes oriented to the cartographic
east-north-up 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 x-y-z axes of the ellipsoid to the axes oriented to the cartographic
north-east-down 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 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 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 x-y-z axes of the ellipsoid to the axes oriented to the cartographic
up-east-north 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 x-axis of the ellipsoid.y
- The semiaxis length along the y-axis of the ellipsoid.z
- The semiaxis length along the z-axis 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 x-axis of the ellipsoid.y
- The semiaxis length along the y-axis of the ellipsoid.z
- The semiaxis length along the z-axis 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 xy-plane. Therefore, the z-axis 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 xy-plane. Therefore, the z-axis 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 z-axis.latitude
- The planetodetic latitude coordinate measured from the x-y 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 west-most longitude which bounds the region.minLatitude
- The south-most latitude which bounds the region.maxLongitude
- The east-most longitude which bounds the region.maxLatitude
- The north-most 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 non-intersecting 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 non-intersecting 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 this ellipsoid.public final double pointSeparationDistance(@Nonnull Cartesian centerToPoint)
Cartesian
does not lie within this ellipsoid this method returns the minimum separation
between 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 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
.