This version of documentation is OUTDATED! Please switch to the latest one.

# Unigine::Ellipsoid Class

Notice
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:

Source code (C++)
``````#include "UnigineMathLib.h"
#include "UnigineGeodetics.h"
#include "UnigineEllipsoid.h"

using namespace Unigine;
using namespace Unigine::Math;

/* ... */

// define the geodetic origin
dvec3 tomsk_origin = dvec3(58.49771, 84.97437, 117.0);

// create a new GeodeticPivot object
GeodeticPivotPtr pivot = GeodeticPivot::create();

// create a new ellipsoid and specify its settings
EllipsoidPtr 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);``````

## static EllipsoidPtr create ( 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 EllipsoidPtr create ( )

Constructor. Creates a new Ellipsoid class instance (WGS84 Ellipsoid).

## Math::dvec3getENUSurfacePoint( const Math::dvec3 & geodetic_origin, const Math::dvec3 & tangent_point )

Returns surface point by using tangent point coordinates.

### Arguments

• const Math::dvec3 & geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
• const Math::dvec3 & tangent_point - Tangent point coordinates to converted (curved) to surface coordinates (offset related to point of junction).

### Return value

Surface point coordinates.

## Math::dvec3getENUTangentPoint( const Math::dvec3 & geodetic_origin, const Math::dvec3 & surface_point )

Returns tangent point ENU coordinates based on the geographical coordinates.

### Arguments

• const Math::dvec3 & geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
• const Math::dvec3 & surface_point - Surface point coordinates to be converted (flatten) to tangent point (offset related to point of junction).

### Return value

Tangent point coordinates.

## Math::quatgetENUWorldRotation( const Math::dvec3 & geodetic_origin )

Returns the world rotation quaternion in ENU coordinates.

### Arguments

• const Math::dvec3 & geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).

### Return value

World rotation in ENU coordinates.

## Math::dmat4getENUWorldTransform( const Math::dvec3 & geodetic_origin )

Returns the world transformation matrix in ENU coordinates.

### Arguments

• const Math::dvec3 & geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).

### Return value

World transformation matrix in ENU coordinates.

## voidsetFlattening( 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.

## doublegetFlattening( )

Returns flattening coefficient of the ellipsoid.

### Return value

Flattening coefficient of the ellipsoid.

Returns the mean radius of the ellipsoid.

### Return value

The mean radius of the ellipsoid.

## intisSupported( )

Returns a value indicating if the geodetics feature is enabled.

### Return value

1 if the geodetics feature is enabled; otherwise, 0.

## voidsetMode( int mode )

Sets the calculation mode.

### Arguments

• int mode - The variable of the calculation mode. It can be one of the following:

## intgetMode( )

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.

## Math::vec3getNEDSurfacePoint( const Math::dvec3 & geodetic_origin, const Math::dvec3 & tangent_point )

Returns surface point by using tangent point coordinates.

### Arguments

• const Math::dvec3 & geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
• const Math::dvec3 & tangent_point - Tangent point coordinates to converted (curved) to surface coordinates (offset related to point of junction).

### Return value

Surface point coordinates.

## Math::vec3getNEDTangentPoint( const Math::dvec3 & geodetic_origin, const Math::dvec3 & surface_point )

Returns tangent point NED coordinates based on the geographical coordinates.

### Arguments

• const Math::dvec3 & geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
• const Math::dvec3 & surface_point - Surface point coordinates to be converted (flatten) to tangent point (offset related to point of junction).

### Return value

Tangent point coordinates.

## Math::quatgetNEDWorldRotation( const Math::dvec3 & geodetic_origin )

Returns the world rotation quaternion in NED coordinates.

### Arguments

• const Math::dvec3 & geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).

### Return value

World rotation in NED coordinates.

## Math::dmat4getNEDWorldTransform( const Math::dvec3 & geodetic_origin )

Returns the world transformation matrix in NED coordinates.

### Arguments

• const Math::dvec3 & geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).

### Return value

World transformation matrix in NED coordinates.

## voidsetSemimajorAxis( double axis )

Sets new semimajor axis of the ellipsoid.

### Arguments

• double axis - Semimajor axis length in units.

## doublegetSemimajorAxis( )

Returns semimajor axis length of the ellipsoid in units.

### Return value

Semimajor axis of the ellipsoid.

## doublegetSemimajorEccentricitySqr( )

Returns the squared eccentricity calculated along the semimajor axis.

### Return value

Squared eccentricity calculated along the semimajor axis.

## doublegetSemiminorAxis( )

Returns semiminor axis of the ellipsoid in units.

### Return value

Semiminor axis of the ellipsoid in units.

## doublegetSemiminorEccentricitySqr( )

Returns the squared eccentricity calculated along the semiminor axis.

### Return value

Squared eccentricity calculated along the semiminor axis.

## Math::dvec3solveGeodeticDirect( const Math::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

• const Math::dvec3 & geodetic_start - Start point on the ellipsoid.
• double bearing - Bearing value.
• double distance - Distance between two points on the ellipsoid.

## voidsolveGeodeticInverse( const Math::dvec3 & geodetic_start, const Math::dvec3 & geodetic_end, double & bearing, double & distance )

Solves the inverse geodetic problem: calculates distance and bearing values by using given start and end points on the ellipsoid.

### Arguments

• const Math::dvec3 & geodetic_start - Start point on the ellipsoid.
• const Math::dvec3 & geodetic_end - End point on the ellipsoid.
• double & bearing - Variable to save the calculated bearing value.
• double & distance - Variable to save the calculated distance value.

## Math::dvec3toECF( const Math::dvec3 & geodetic_coords )

Converts geodetic coordinates to Cartesian (ECF).

### Arguments

• const Math::dvec3 & geodetic_coords - Ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters)) to be converted to Cartesian.

### Return value

Cartesian coordinates.

## Math::dvec3toENU( const Math::dvec3 & geodetic_origin, const Math::dvec3 & geodetic_coords )

Converts geodetic coordinates to ENU (East, North, Up).

### Arguments

• const Math::dvec3 & geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
• const Math::dvec3 & geodetic_coords - Coordinates to be converted to ENU.

ENU coordinates.

## Math::dvec3toGeodetic( const Math::dvec3 & ecf_coords, int need_alt = 1 )

Converts Cartesian (ECF) coordinates to Ellipsoid.

### Arguments

• const Math::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)

## Math::dvec3toNED( const Math::dvec3 & geodetic_origin, const Math::dvec3 & geodetic_coords )

Converts geodetics coordinates to NED (North, East, Down).

### Arguments

• const Math::dvec3 & geodetic_origin - The origin in ellipsoid coordinates (latitude (degrees), longitude (degrees) and altitude (meters).
• const Math::dvec3 & geodetic_coords - Coordinates to be converted to NED.

### Return value

NED coordinates.
Last update: 2018-12-27