Unigine.Ellipsoid Class
The Ellipsoid class is available only in the Engineering and Sim versions of UNIGINE SDK.
The Ellipsoid class handles the geodetic transformations:
- Specifies the Ellipsoid settings: semimajor axis, flattening coefficient
- Performs systems coordinates (ECF, ENU, NED, Geodetic) conversion
- Solves direct and inverse geodetic problems with different calculation mode (Great Circle and Vincenty algorithms)
This class is used to create an Ellipsoid instance to the GeodeticPivot class.
Here is a code snippet of the Ellipsoid class usage:
// define the geodetic origin
dvec3 tomsk_origin = new dvec3(58.49771, 84.97437, 117.0);
// create a new GeodeticPivot object
GeodeticPivot pivot = new GeodeticPivot();
// create a new ellipsoid and specify its settings
Ellipsoid ellipsoid = pivot.getEllipsoid();
ellipsoid.setSemimajorAxis(80000.0f);
ellipsoid.setMode(Ellipsoid.MODE_FAST);
// set the ellipsoid to the pivot
pivot.setOrigin(tomsk_origin);
pivot.setEllipsoid(ellipsoid);
Ellipsoid Class
Members
static Ellipsoid(double semimajor_axis, double flattening)
Constructor. Creates a new Ellipsoid class instance with given flattening and semimajor axis.Arguments
- double semimajor_axis - Semimajor axis.
- double flattening - Flattening coefficient.
static Ellipsoid()
Constructor. Creates a new Ellipsoid class instance (WGS84 Ellipsoid).dvec3 getENUSurfacePoint(dvec3 geodetic_origin, dvec3 tangent_point)
Returns surface point by using tangent point coordinates.Arguments
- dvec3 geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
- dvec3 tangent_point - Tangent point coordinates to converted (curved) to surface coordinates (offset related to point of junction).
Return value
Surface point coordinates.dvec3 getENUTangentPoint(dvec3 geodetic_origin, dvec3 surface_point)
Returns tangent point ENU coordinates based on the geographical coordinates.Arguments
- dvec3 geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
- dvec3 surface_point - Surface point coordinates to be converted (flatten) to tangent point (offset related to point of junction).
Return value
Tangent point coordinates.quat getENUWorldRotation(dvec3 geodetic_origin)
Returns the world rotation quaternion in ENU coordinates.Arguments
- dvec3 geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
Return value
World rotation in ENU coordinates.dmat4 getENUWorldTransform(dvec3 geodetic_origin)
Returns the world transformation matrix in ENU coordinates.Arguments
- dvec3 geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
Return value
World transformation matrix in ENU coordinates.void setFlattening(double flattening)
Sets new flattening for the ellipsoid.Arguments
- double flattening - Flattening coefficient of the ellipsoid. If the value is 0, the ellipsoid has a sphere shape, for 1 the ellipsoid has a circle (completely flat) shape.
double getFlattening()
Returns flattening coefficient of the ellipsoid.Return value
Flattening coefficient of the ellipsoid.double getMeanRadius()
Returns the mean radius of the ellipsoid.Return value
The mean radius of the ellipsoid.int isSupported()
Returns a value indicating if the geodetics feature is enabled.Return value
1 if the geodetics feature is enabled; otherwise, 0.void setMode(int mode)
Sets the calculation mode.Arguments
- int mode - The variable of the calculation mode. It can be one of the following:
int getMode()
Returns the calculation mode int value: 1 if the mode is MODE_ACCURATE, 0 if the mode is MODE_FAST.Return value
1 if the mode is MODE_ACCURATE, 0 if the mode is MODE_FAST.vec3 getNEDSurfacePoint(dvec3 geodetic_origin, dvec3 tangent_point)
Returns surface point by using tangent point coordinates.Arguments
- dvec3 geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
- dvec3 tangent_point - Tangent point coordinates to converted (curved) to surface coordinates (offset related to point of junction).
Return value
Surface point coordinates.vec3 getNEDTangentPoint(dvec3 geodetic_origin, dvec3 surface_point)
Returns tangent point NED coordinates based on the geographical coordinates.Arguments
- dvec3 geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
- dvec3 surface_point - Surface point coordinates to be converted (flatten) to tangent point (offset related to point of junction).
Return value
Tangent point coordinates.quat getNEDWorldRotation(dvec3 geodetic_origin)
Returns the world rotation quaternion in NED coordinates.Arguments
- dvec3 geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
Return value
World rotation in NED coordinates.dmat4 getNEDWorldTransform(dvec3 geodetic_origin)
Returns the world transformation matrix in NED coordinates.Arguments
- dvec3 geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
Return value
World transformation matrix in NED coordinates.void setSemimajorAxis(double axis)
Sets new semimajor axis of the ellipsoid.Arguments
- double axis - Semimajor axis length in units.
double getSemimajorAxis()
Returns semimajor axis length of the ellipsoid in units.Return value
Semimajor axis of the ellipsoid.double getSemimajorEccentricitySqr()
Returns the squared eccentricity calculated along the semimajor axis.Return value
Squared eccentricity calculated along the semimajor axis.double getSemiminorAxis()
Returns semiminor axis of the ellipsoid in units.Return value
Semiminor axis of the ellipsoid in units.double getSemiminorEccentricitySqr()
Returns the squared eccentricity calculated along the semiminor axis.Return value
Squared eccentricity calculated along the semiminor axis.dvec3 solveGeodeticDirect(dvec3 geodetic_start, double bearing, double distance)
Solves the direct geodetic problem: calculates end point coordinates on the ellipsoid by using given start point, distance between points, and bearing value.Arguments
- dvec3 geodetic_start - Start point on the ellipsoid.
- double bearing - Bearing value.
- double distance - Distance between two points on the ellipsoid.
void solveGeodeticInverse(dvec3 geodetic_start, dvec3 geodetic_end, ref double bearing, ref double distance)
Solves the inverse geodetic problem: calculates distance and bearing values by using given start and end points on the ellipsoid.Arguments
- dvec3 geodetic_start - Start point on the ellipsoid.
- dvec3 geodetic_end - End point on the ellipsoid.
- ref double bearing - Variable to save the calculated bearing value.
- ref double distance - Variable to save the calculated distance value.
dvec3 toECF(dvec3 geodetic_coords)
Converts geodetic coordinates to Cartesian (ECF).Arguments
- dvec3 geodetic_coords - Ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters)) to be converted to Cartesian.
Return value
Cartesian coordinates.dvec3 toENU(dvec3 geodetic_origin, dvec3 geodetic_coords)
Converts geodetic coordinates to ENU (East, North, Up).Arguments
- dvec3 geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
- dvec3 geodetic_coords - Coordinates to be converted to ENU.
Return value
ENU coordinates.dvec3 toGeodetic(dvec3 ecf_coords, int need_alt = 1)
Converts Cartesian (ECF) coordinates to Ellipsoid.Arguments
- dvec3 ecf_coords - Cartesian ECF coordinates to be converted.
- int need_alt - Flag indicating if altitude is to be calculated. 1 to calculate altitude, 0 - to skip altitude calculation.The default value is 1.
Return value
Ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters)dvec3 toNED(dvec3 geodetic_origin, dvec3 geodetic_coords)
Converts geodetics coordinates to NED (North, East, Down).Arguments
- dvec3 geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
- dvec3 geodetic_coords - Coordinates to be converted to NED.
Return value
NED coordinates.int MODE_ACCURATE
Description
A calculation mode uses Vincenty's formula to calculate distances on the surface of the ellipsoid with a millimeter precision. It takes more time for calculation, but the accuracy of positioning is awesome.int MODE_FAST
Description
A calculation mode is computed by using Great-circle distance formula. It works pretty fast, but you'll get positioning errors on big (~80000x80000 units) distances.Last update: 2018-08-10
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)