# Ellipsoid

#### new Cesium.Ellipsoid(x, y, z)
engine/Source/Core/Ellipsoid.js 75

A quadratic surface defined in Cartesian coordinates by the equation `(x / a)^2 + (y / b)^2 + (z / c)^2 = 1`. Primarily used by Cesium to represent the shape of planetary bodies. Rather than constructing this object directly, one of the provided constants is normally used.

Name | Type | Default | Description
--- | --- | --- | ---
`x` | number | `0` | optional The radius in the x direction.
`y` | number | `0` | optional The radius in the y direction.
`z` | number | `0` | optional The radius in the z direction.

##### Throws:

- DeveloperError : All radii components must be greater than or equal to zero.

##### See:

- Ellipsoid.fromCartesian3
- Ellipsoid.WGS84
- Ellipsoid.UNIT_SPHERE

### Members

#### static Cesium.Ellipsoid.default : Ellipsoid
engine/Source/Core/Ellipsoid.js 281

The default ellipsoid used when not otherwise specified.

##### Example:

    Cesium.Ellipsoid.default = Cesium.Ellipsoid.MOON;

    // Apollo 11 landing site
    const position = Cesium.Cartesian3.fromRadians(
      0.67416,
      23.47315,
    );

#### static constant Cesium.Ellipsoid.MARS : Ellipsoid
engine/Source/Core/Ellipsoid.js 264

An Ellipsoid instance initialized to a sphere with the mean radii of Mars. Source: https://epsg.io/104905

#### static constant Cesium.Ellipsoid.MOON : Ellipsoid
engine/Source/Core/Ellipsoid.js 249

An Ellipsoid instance initialized to a sphere with the lunar radius.

#### static Cesium.Ellipsoid.packedLength : number
engine/Source/Core/Ellipsoid.js 315

The number of elements used to pack the object into an array.

#### static constant Cesium.Ellipsoid.UNIT_SPHERE : Ellipsoid
engine/Source/Core/Ellipsoid.js 241

An Ellipsoid instance initialized to radii of (1.0, 1.0, 1.0).

#### static constant Cesium.Ellipsoid.WGS84 : Ellipsoid
engine/Source/Core/Ellipsoid.js 231

An Ellipsoid instance initialized to the WGS84 standard.

#### readonly maximumRadius : number
engine/Source/Core/Ellipsoid.js 162

Gets the maximum radius of the ellipsoid.

#### readonly minimumRadius : number
engine/Source/Core/Ellipsoid.js 151

Gets the minimum radius of the ellipsoid.

#### readonly oneOverRadii : Cartesian3
engine/Source/Core/Ellipsoid.js 129

Gets one over the radii of the ellipsoid.

#### readonly oneOverRadiiSquared : Cartesian3
engine/Source/Core/Ellipsoid.js 140

Gets one over the squared radii of the ellipsoid.

#### readonly radii : Cartesian3
engine/Source/Core/Ellipsoid.js 96

Gets the radii of the ellipsoid.

#### readonly radiiSquared : Cartesian3
engine/Source/Core/Ellipsoid.js 107

Gets the squared radii of the ellipsoid.

#### readonly radiiToTheFourth : Cartesian3
engine/Source/Core/Ellipsoid.js 118

Gets the radii of the ellipsoid raise to the fourth power.

### Methods

#### static Cesium.Ellipsoid.clone(ellipsoid, result) → Ellipsoid
engine/Source/Core/Ellipsoid.js 177

Duplicates an Ellipsoid instance.

Name | Type | Description
--- | --- | ---
`ellipsoid` | Ellipsoid | The ellipsoid to duplicate.
`result` | Ellipsoid | optional The object onto which to store the result, or undefined if a new instance should be created.

##### Returns:

The cloned Ellipsoid. (Returns undefined if ellipsoid is undefined)

#### static Cesium.Ellipsoid.fromCartesian3(cartesian, result) → Ellipsoid
engine/Source/Core/Ellipsoid.js 212

Computes an Ellipsoid from a Cartesian specifying the radii in x, y, and z directions.

Name | Type | Default | Description
--- | --- | --- | ---
`cartesian` | Cartesian3 | `Cartesian3.ZERO` | optional The ellipsoid's radius in the x, y, and z directions.
`result` | Ellipsoid |  | optional The object onto which to store the result, or undefined if a new instance should be created.

##### Returns:

A new Ellipsoid instance.

##### Throws:

- DeveloperError : All radii components must be greater than or equal to zero.

##### See:

- Ellipsoid.WGS84
- Ellipsoid.UNIT_SPHERE

#### static Cesium.Ellipsoid.pack(value, array, startingIndex) → Array.<number>
engine/Source/Core/Ellipsoid.js 326

Stores the provided instance into the provided array.

Name | Type | Default | Description
--- | --- | --- | ---
`value` | Ellipsoid |  | The value to pack.
`array` | Array.<number> |  | The array to pack into.
`startingIndex` | number | `0` | optional The index into the array at which to start packing the elements.

##### Returns:

The array that was packed into

#### static Cesium.Ellipsoid.unpack(array, startingIndex, result) → Ellipsoid
engine/Source/Core/Ellipsoid.js 347

Retrieves an instance from a packed array.

Name | Type | Default | Description
--- | --- | --- | ---
`array` | Array.<number> |  | The packed array.
`startingIndex` | number | `0` | optional The starting index of the element to be unpacked.
`result` | Ellipsoid |  | optional The object into which to store the result.

##### Returns:

The modified result parameter or a new Ellipsoid instance if one was not provided.

#### cartesianArrayToCartographicArray(cartesians, result) → Array.<Cartographic>
engine/Source/Core/Ellipsoid.js 551

Converts the provided array of cartesians to an array of cartographics.

Name | Type | Description
--- | --- | ---
`cartesians` | Array.<Cartesian3> | An array of Cartesian positions.
`result` | Array.<Cartographic> | optional The object onto which to store the result.

##### Returns:

The modified result parameter or a new Array instance if none was provided.

##### Example:

    //Create an array of Cartesians and determine their Cartographic representation on a WGS84 ellipsoid.
    const positions = [new Cesium.Cartesian3(17832.12, 83234.52, 952313.73),
                     new Cesium.Cartesian3(17832.13, 83234.53, 952313.73),
                     new Cesium.Cartesian3(17832.14, 83234.54, 952313.73)]
    const cartographicPositions = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(positions);

#### cartesianToCartographic(cartesian, result) → Cartographic
engine/Source/Core/Ellipsoid.js 512

Converts the provided cartesian to cartographic representation. The cartesian is undefined at the center of the ellipsoid.

Name | Type | Description
--- | --- | ---
`cartesian` | Cartesian3 | The Cartesian position to convert to cartographic representation.
`result` | Cartographic | optional The object onto which to store the result.

##### Returns:

The modified result parameter, new Cartographic instance if none was provided, or undefined if the cartesian is at the center of the ellipsoid.

##### Example:

    //Create a Cartesian and determine it's Cartographic representation on a WGS84 ellipsoid.
    const position = new Cesium.Cartesian3(17832.12, 83234.52, 952313.73);
    const cartographicPosition = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);

#### cartographicArrayToCartesianArray(cartographics, result) → Array.<Cartesian3>
engine/Source/Core/Ellipsoid.js 475

Converts the provided array of cartographics to an array of Cartesians.

Name | Type | Description
--- | --- | ---
`cartographics` | Array.<Cartographic> | An array of cartographic positions.
`result` | Array.<Cartesian3> | optional The object onto which to store the result.

##### Returns:

The modified result parameter or a new Array instance if none was provided.

##### Example:

    //Convert an array of Cartographics and determine their Cartesian representation on a WGS84 ellipsoid.
    const positions = [new Cesium.Cartographic(Cesium.Math.toRadians(21), Cesium.Math.toRadians(78), 0),
                     new Cesium.Cartographic(Cesium.Math.toRadians(21.321), Cesium.Math.toRadians(78.123), 100),
                     new Cesium.Cartographic(Cesium.Math.toRadians(21.645), Cesium.Math.toRadians(78.456), 250)];
    const cartesianPositions = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(positions);

#### cartographicToCartesian(cartographic, result) → Cartesian3
engine/Source/Core/Ellipsoid.js 445

Converts the provided cartographic to Cartesian representation.

Name | Type | Description
--- | --- | ---
`cartographic` | Cartographic | The cartographic position.
`result` | Cartesian3 | optional The object onto which to store the result.

##### Returns:

The modified result parameter or a new Cartesian3 instance if none was provided.

##### Example:

    //Create a Cartographic and determine it's Cartesian representation on a WGS84 ellipsoid.
    const position = new Cesium.Cartographic(Cesium.Math.toRadians(21), Cesium.Math.toRadians(78), 5000);
    const cartesianPosition = Cesium.Ellipsoid.WGS84.cartographicToCartesian(position);

#### clone(result) → Ellipsoid
engine/Source/Core/Ellipsoid.js 307

Duplicates an Ellipsoid instance.

Name | Type | Description
--- | --- | ---
`result` | Ellipsoid | optional The object onto which to store the result, or undefined if a new instance should be created.

##### Returns:

The cloned Ellipsoid.

#### equals(right) → boolean
engine/Source/Core/Ellipsoid.js 672

Compares this Ellipsoid against the provided Ellipsoid componentwise and returns `true` if they are equal, `false` otherwise.

Name | Type | Description
--- | --- | ---
`right` | Ellipsoid | optional The other Ellipsoid.

##### Returns:

`true` if they are equal, `false` otherwise.

#### geocentricSurfaceNormal(cartesian, result) → Cartesian3
engine/Source/Core/Ellipsoid.js 366

Computes the unit vector directed from the center of this ellipsoid toward the provided Cartesian position.

Name | Type | Description
--- | --- | ---
`cartesian` | Cartesian3 | The Cartesian for which to to determine the geocentric normal.
`result` | Cartesian3 | optional The object onto which to store the result.

##### Returns:

The modified result parameter or a new Cartesian3 instance if none was provided.

#### geodeticSurfaceNormal(cartesian, result) → Cartesian3
engine/Source/Core/Ellipsoid.js 407

Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position.

Name | Type | Description
--- | --- | ---
`cartesian` | Cartesian3 | The Cartesian position for which to to determine the surface normal.
`result` | Cartesian3 | optional The object onto which to store the result.

##### Returns:

The modified result parameter or a new Cartesian3 instance if none was provided, or undefined if a normal cannot be found.

#### geodeticSurfaceNormalCartographic(cartographic, result) → Cartesian3
engine/Source/Core/Ellipsoid.js 375

Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position.

Name | Type | Description
--- | --- | ---
`cartographic` | Cartographic | The cartographic position for which to to determine the geodetic normal.
`result` | Cartesian3 | optional The object onto which to store the result.

##### Returns:

The modified result parameter or a new Cartesian3 instance if none was provided.

#### getLocalCurvature(surfacePosition, result) → Cartesian2
engine/Source/Core/Ellipsoid.js 757

Computes the ellipsoid curvatures at a given position on the surface.

Name | Type | Description
--- | --- | ---
`surfacePosition` | Cartesian3 | The position on the ellipsoid surface where curvatures will be calculated.
`result` | Cartesian2 | optional The cartesian to which to copy the result, or undefined to create and return a new instance.

##### Returns:

The local curvature of the ellipsoid surface at the provided position, in east and north directions.

##### Throws:

- DeveloperError : position is required.

#### getSurfaceNormalIntersectionWithZAxis(position, buffer, result) → Cartesian3|undefined
engine/Source/Core/Ellipsoid.js 704

Computes a point which is the intersection of the surface normal with the z-axis.

Name | Type | Default | Description
--- | --- | --- | ---
`position` | Cartesian3 |  | the position. must be on the surface of the ellipsoid.
`buffer` | number | `0.0` | optional A buffer to subtract from the ellipsoid size when checking if the point is inside the ellipsoid. In earth case, with common earth datums, there is no need for this buffer since the intersection point is always (relatively) very close to the center. In WGS84 datum, intersection point is at max z = +-42841.31151331382 (0.673% of z-axis). Intersection point could be outside the ellipsoid if the ratio of MajorAxis / AxisOfRotation is bigger than the square root of 2
`result` | Cartesian3 |  | optional The cartesian to which to copy the result, or undefined to create and return a new instance.

##### Returns:

the intersection point if it's inside the ellipsoid, undefined otherwise

##### Throws:

- DeveloperError : position is required.
- DeveloperError : Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y).
- DeveloperError : Ellipsoid.radii.z must be greater than 0.

#### scaleToGeocentricSurface(cartesian, result) → Cartesian3
engine/Source/Core/Ellipsoid.js 598

Scales the provided Cartesian position along the geocentric surface normal so that it is on the surface of this ellipsoid.

Name | Type | Description
--- | --- | ---
`cartesian` | Cartesian3 | The Cartesian position to scale.
`result` | Cartesian3 | optional The object onto which to store the result.

##### Returns:

The modified result parameter or a new Cartesian3 instance if none was provided.

#### scaleToGeodeticSurface(cartesian, result) → Cartesian3
engine/Source/Core/Ellipsoid.js 580

Scales the provided Cartesian position along the geodetic surface normal so that it is on the surface of this ellipsoid. If the position is at the center of the ellipsoid, this function returns undefined.

Name | Type | Description
--- | --- | ---
`cartesian` | Cartesian3 | The Cartesian position to scale.
`result` | Cartesian3 | optional The object onto which to store the result.

##### Returns:

The modified result parameter, a new Cartesian3 instance if none was provided, or undefined if the position is at the center.

#### surfaceArea(rectangle) → number
engine/Source/Core/Ellipsoid.js 849

Computes an approximation of the surface area of a rectangle on the surface of an ellipsoid using Gauss-Legendre 10th order quadrature.

Name | Type | Description
--- | --- | ---
`rectangle` | Rectangle | The rectangle used for computing the surface area.

##### Returns:

The approximate area of the rectangle on the surface of this ellipsoid.

#### toString() → string
engine/Source/Core/Ellipsoid.js 684

Creates a string representing this Ellipsoid in the format '(radii.x, radii.y, radii.z)'.

##### Returns:

A string representing this ellipsoid in the format '(radii.x, radii.y, radii.z)'.

#### transformPositionFromScaledSpace(position, result) → Cartesian3
engine/Source/Core/Ellipsoid.js 654

Transforms a Cartesian X, Y, Z position from the ellipsoid-scaled space by multiplying its components by the result of `Ellipsoid#radii`.

Name | Type | Description
--- | --- | ---
`position` | Cartesian3 | The position to transform.
`result` | Cartesian3 | optional The position to which to copy the result, or undefined to create and return a new instance.

##### Returns:

The position expressed in the unscaled space. The returned instance is the one passed as the result parameter if it is not undefined, or a new instance of it is.

#### transformPositionToScaledSpace(position, result) → Cartesian3
engine/Source/Core/Ellipsoid.js 633

Transforms a Cartesian X, Y, Z position to the ellipsoid-scaled space by multiplying its components by the result of `Ellipsoid#oneOverRadii`.

Name | Type | Description
--- | --- | ---
`position` | Cartesian3 | The position to transform.
`result` | Cartesian3 | optional The position to which to copy the result, or undefined to create and return a new instance.

##### Returns:

The position expressed in the scaled space. The returned instance is the one passed as the result parameter if it is not undefined, or a new instance of it is.

Need help? The fastest way to get answers is from the community and team on the Cesium Forum.