Warning! This version of documentation is OUTDATED, as it describes an older SDK version! Please switch to the documentation for the latest SDK version.
Warning! This version of documentation describes an old SDK version which is no longer supported! Please upgrade to the latest SDK version.

# Unigine::Ellipsoid Class

Warning
You should upgrade to Engineering / Sim SDK edition to use it.

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::dvec3getNEDSurfacePoint ( 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::dvec3getNEDTangentPoint ( 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: 2020-07-31