# Quaternion

#### new Cesium.Quaternion(x, y, z, w)
engine/Source/Core/Quaternion.js 21

A set of 4-dimensional coordinates used to represent rotation in 3-dimensional space.

Name | Type | Default | Description
--- | --- | --- | ---
`x` | number | `0.0` | optional The X component.
`y` | number | `0.0` | optional The Y component.
`z` | number | `0.0` | optional The Z component.
`w` | number | `0.0` | optional The W component.

##### See:

- PackableForInterpolation

### Members

#### static constant Cesium.Quaternion.IDENTITY : Quaternion
engine/Source/Core/Quaternion.js 1098

An immutable Quaternion instance initialized to (0.0, 0.0, 0.0, 1.0).

#### static Cesium.Quaternion.packedInterpolationLength : number
engine/Source/Core/Quaternion.js 281

The number of elements used to store the object into an array in its interpolatable form.

#### static Cesium.Quaternion.packedLength : number
engine/Source/Core/Quaternion.js 225

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

#### static constant Cesium.Quaternion.ZERO : Quaternion
engine/Source/Core/Quaternion.js 1090

An immutable Quaternion instance initialized to (0.0, 0.0, 0.0, 0.0).

#### w : number
engine/Source/Core/Quaternion.js 48

The W component.

Default Value: `0.0`

#### x : number
engine/Source/Core/Quaternion.js 27

The X component.

Default Value: `0.0`

#### y : number
engine/Source/Core/Quaternion.js 34

The Y component.

Default Value: `0.0`

#### z : number
engine/Source/Core/Quaternion.js 41

The Z component.

Default Value: `0.0`

### Methods

#### static Cesium.Quaternion.add(left, right, result) → Quaternion
engine/Source/Core/Quaternion.js 511

Computes the componentwise sum of two quaternions.

Name | Type | Description
--- | --- | ---
`left` | Quaternion | The first quaternion.
`right` | Quaternion | The second quaternion.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

#### static Cesium.Quaternion.clone(quaternion, result) → Quaternion
engine/Source/Core/Quaternion.js 391

Duplicates a Quaternion instance.

Name | Type | Description
--- | --- | ---
`quaternion` | Quaternion | The quaternion to duplicate.
`result` | Quaternion | optional The object onto which to store the result.

##### Returns:

The modified result parameter or a new Quaternion instance if one was not provided. (Returns undefined if quaternion is undefined)

#### static Cesium.Quaternion.computeAngle(quaternion) → number
engine/Source/Core/Quaternion.js 699

Computes the angle of rotation of the provided quaternion.

Name | Type | Description
--- | --- | ---
`quaternion` | Quaternion | The quaternion to use.

##### Returns:

The angle of rotation.

#### static Cesium.Quaternion.computeAxis(quaternion, result) → Cartesian3
engine/Source/Core/Quaternion.js 673

Computes the axis of rotation of the provided quaternion.

Name | Type | Description
--- | --- | ---
`quaternion` | Quaternion | The quaternion to use.
`result` | Cartesian3 | The object onto which to store the result.

##### Returns:

The modified result parameter.

#### static Cesium.Quaternion.computeInnerQuadrangle(q0, q1, q2, result) → Quaternion
engine/Source/Core/Quaternion.js 854

Computes an inner quadrangle point.

This will compute quaternions that ensure a squad curve is C1.

Name | Type | Description
--- | --- | ---
`q0` | Quaternion | The first quaternion.
`q1` | Quaternion | The second quaternion.
`q2` | Quaternion | The third quaternion.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

##### See:

- Quaternion#squad

#### static Cesium.Quaternion.conjugate(quaternion, result) → Quaternion
engine/Source/Core/Quaternion.js 419

Computes the conjugate of the provided quaternion.

Name | Type | Description
--- | --- | ---
`quaternion` | Quaternion | The quaternion to conjugate.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

#### static Cesium.Quaternion.convertPackedArrayForInterpolation(packedArray, startingIndex, lastIndex, result)
engine/Source/Core/Quaternion.js 291

Converts a packed array into a form suitable for interpolation.

Name | Type | Default | Description
--- | --- | --- | ---
`packedArray` | Array.<number> |  | The packed array.
`startingIndex` | number | `0` | optional The index of the first element to be converted.
`lastIndex` | number | `packedArray.length` | optional The index of the last element to be converted.
`result` | Array.<number> |  | optional The object into which to store the result.

#### static Cesium.Quaternion.divideByScalar(quaternion, scalar, result) → Quaternion
engine/Source/Core/Quaternion.js 652

Divides the provided quaternion componentwise by the provided scalar.

Name | Type | Description
--- | --- | ---
`quaternion` | Quaternion | The quaternion to be divided.
`scalar` | number | The scalar to divide by.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

#### static Cesium.Quaternion.dot(left, right) → number
engine/Source/Core/Quaternion.js 574

Computes the dot (scalar) product of two quaternions.

Name | Type | Description
--- | --- | ---
`left` | Quaternion | The first quaternion.
`right` | Quaternion | The second quaternion.

##### Returns:

The dot product.

#### static Cesium.Quaternion.equals(left, right) → boolean
engine/Source/Core/Quaternion.js 1048

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

Name | Type | Description
--- | --- | ---
`left` | Quaternion | optional The first quaternion.
`right` | Quaternion | optional The second quaternion.

##### Returns:

`true` if left and right are equal, `false` otherwise.

#### static Cesium.Quaternion.equalsEpsilon(left, right, epsilon) → boolean
engine/Source/Core/Quaternion.js 1070

Compares the provided quaternions componentwise and returns `true` if they are within the provided epsilon, `false` otherwise.

Name | Type | Default | Description
--- | --- | --- | ---
`left` | Quaternion |  | optional The first quaternion.
`right` | Quaternion |  | optional The second quaternion.
`epsilon` | number | `0` | optional The epsilon to use for equality testing.

##### Returns:

`true` if left and right are within the provided epsilon, `false` otherwise.

#### static Cesium.Quaternion.exp(cartesian, result) → Quaternion
engine/Source/Core/Quaternion.js 816

The exponential quaternion function.

Name | Type | Description
--- | --- | ---
`cartesian` | Cartesian3 | The cartesian.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

#### static Cesium.Quaternion.fastSlerp(start, end, t, result) → Quaternion
engine/Source/Core/Quaternion.js 946

Computes the spherical linear interpolation or extrapolation at t using the provided quaternions. This implementation is faster than `Quaternion#slerp`, but is only accurate up to 10-6.

Name | Type | Description
--- | --- | ---
`start` | Quaternion | The value corresponding to t at 0.0.
`end` | Quaternion | The value corresponding to t at 1.0.
`t` | number | The point along t at which to interpolate.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

##### See:

- Quaternion#slerp

#### static Cesium.Quaternion.fastSquad(q0, q1, s0, s1, t, result) → Quaternion
engine/Source/Core/Quaternion.js 1025

Computes the spherical quadrangle interpolation between quaternions. An implementation that is faster than `Quaternion#squad`, but less accurate.

Name | Type | Description
--- | --- | ---
`q0` | Quaternion | The first quaternion.
`q1` | Quaternion | The second quaternion.
`s0` | Quaternion | The first inner quadrangle.
`s1` | Quaternion | The second inner quadrangle.
`t` | number | The time in [0,1] used to interpolate.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

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

##### See:

- Quaternion#squad

#### static Cesium.Quaternion.fromAxisAngle(axis, angle, result) → Quaternion
engine/Source/Core/Quaternion.js 61

Computes a quaternion representing a rotation around an axis.

Name | Type | Description
--- | --- | ---
`axis` | Cartesian3 | The axis of rotation.
`angle` | number | The angle in radians to rotate around the axis.
`result` | Quaternion | optional The object onto which to store the result.

##### Returns:

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

#### static Cesium.Quaternion.fromHeadingPitchRoll(headingPitchRoll, result) → Quaternion
engine/Source/Core/Quaternion.js 187

Computes a rotation from the given heading, pitch and roll angles. Heading is the rotation about the negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about the positive x axis.

Name | Type | Description
--- | --- | ---
`headingPitchRoll` | HeadingPitchRoll | The rotation expressed as a heading, pitch and roll.
`result` | Quaternion | optional The object onto which to store the result.

##### Returns:

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

#### static Cesium.Quaternion.fromRotationMatrix(matrix, result) → Quaternion
engine/Source/Core/Quaternion.js 96

Computes a Quaternion from the provided Matrix3 instance.

Name | Type | Description
--- | --- | ---
`matrix` | Matrix3 | The rotation matrix.
`result` | Quaternion | optional The object onto which to store the result.

##### Returns:

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

##### See:

- Matrix3.fromQuaternion

#### static Cesium.Quaternion.inverse(quaternion, result) → Quaternion
engine/Source/Core/Quaternion.js 493

Computes the inverse of the provided quaternion.

Name | Type | Description
--- | --- | ---
`quaternion` | Quaternion | The quaternion to normalize.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

#### static Cesium.Quaternion.lerp(start, end, t, result) → Quaternion
engine/Source/Core/Quaternion.js 720

Computes the linear interpolation or extrapolation at t using the provided quaternions.

Name | Type | Description
--- | --- | ---
`start` | Quaternion | The value corresponding to t at 0.0.
`end` | Quaternion | The value corresponding to t at 1.0.
`t` | number | The point along t at which to interpolate.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

#### static Cesium.Quaternion.log(quaternion, result) → Cartesian3
engine/Source/Core/Quaternion.js 793

The logarithmic quaternion function.

Name | Type | Description
--- | --- | ---
`quaternion` | Quaternion | The unit quaternion.
`result` | Cartesian3 | The object onto which to store the result.

##### Returns:

The modified result parameter.

#### static Cesium.Quaternion.magnitude(quaternion) → number
engine/Source/Core/Quaternion.js 457

Computes magnitude for the provided quaternion.

Name | Type | Description
--- | --- | ---
`quaternion` | Quaternion | The quaternion to conjugate.

##### Returns:

The magnitude.

#### static Cesium.Quaternion.magnitudeSquared(quaternion) → number
engine/Source/Core/Quaternion.js 438

Computes magnitude squared for the provided quaternion.

Name | Type | Description
--- | --- | ---
`quaternion` | Quaternion | The quaternion to conjugate.

##### Returns:

The magnitude squared.

#### static Cesium.Quaternion.multiply(left, right, result) → Quaternion
engine/Source/Core/Quaternion.js 593

Computes the product of two quaternions.

Name | Type | Description
--- | --- | ---
`left` | Quaternion | The first quaternion.
`right` | Quaternion | The second quaternion.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

#### static Cesium.Quaternion.multiplyByScalar(quaternion, scalar, result) → Quaternion
engine/Source/Core/Quaternion.js 630

Multiplies the provided quaternion componentwise by the provided scalar.

Name | Type | Description
--- | --- | ---
`quaternion` | Quaternion | The quaternion to be scaled.
`scalar` | number | The scalar to multiply with.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

#### static Cesium.Quaternion.negate(quaternion, result) → Quaternion
engine/Source/Core/Quaternion.js 554

Negates the provided quaternion.

Name | Type | Description
--- | --- | ---
`quaternion` | Quaternion | The quaternion to be negated.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

#### static Cesium.Quaternion.normalize(quaternion, result) → Quaternion
engine/Source/Core/Quaternion.js 468

Computes the normalized form of the provided quaternion.

Name | Type | Description
--- | --- | ---
`quaternion` | Quaternion | The quaternion to normalize.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

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

Stores the provided instance into the provided array.

Name | Type | Default | Description
--- | --- | --- | ---
`value` | Quaternion |  | 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.Quaternion.slerp(start, end, t, result) → Quaternion
engine/Source/Core/Quaternion.js 747

Computes the spherical linear interpolation or extrapolation at t using the provided quaternions.

Name | Type | Description
--- | --- | ---
`start` | Quaternion | The value corresponding to t at 0.0.
`end` | Quaternion | The value corresponding to t at 1.0.
`t` | number | The point along t at which to interpolate.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

##### See:

- Quaternion#fastSlerp

#### static Cesium.Quaternion.squad(q0, q1, s0, s1, t, result) → Quaternion
engine/Source/Core/Quaternion.js 901

Computes the spherical quadrangle interpolation between quaternions.

Name | Type | Description
--- | --- | ---
`q0` | Quaternion | The first quaternion.
`q1` | Quaternion | The second quaternion.
`s0` | Quaternion | The first inner quadrangle.
`s1` | Quaternion | The second inner quadrangle.
`t` | number | The time in [0,1] used to interpolate.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

##### Example:

    // 1. compute the squad interpolation between two quaternions on a curve
    const s0 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[i - 1], quaternions[i], quaternions[i + 1], new Cesium.Quaternion());
    const s1 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[i], quaternions[i + 1], quaternions[i + 2], new Cesium.Quaternion());
    const q = Cesium.Quaternion.squad(quaternions[i], quaternions[i + 1], s0, s1, t, new Cesium.Quaternion());

    // 2. compute the squad interpolation as above but where the first quaternion is a end point.
    const s1 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[0], quaternions[1], quaternions[2], new Cesium.Quaternion());
    const q = Cesium.Quaternion.squad(quaternions[0], quaternions[1], quaternions[0], s1, t, new Cesium.Quaternion());

##### See:

- Quaternion#computeInnerQuadrangle

#### static Cesium.Quaternion.subtract(left, right, result) → Quaternion
engine/Source/Core/Quaternion.js 533

Computes the componentwise difference of two quaternions.

Name | Type | Description
--- | --- | ---
`left` | Quaternion | The first quaternion.
`right` | Quaternion | The second quaternion.
`result` | Quaternion | The object onto which to store the result.

##### Returns:

The modified result parameter.

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

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` | Quaternion |  | optional The object into which to store the result.

##### Returns:

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

#### static Cesium.Quaternion.unpackInterpolationResult(array, sourceArray, firstIndex, lastIndex, result) → Quaternion
engine/Source/Core/Quaternion.js 352

Retrieves an instance from a packed array converted with `convertPackedArrayForInterpolation`.

Name | Type | Default | Description
--- | --- | --- | ---
`array` | Array.<number> |  | The array previously packed for interpolation.
`sourceArray` | Array.<number> |  | The original packed array.
`firstIndex` | number | `0` | optional The firstIndex used to convert the array.
`lastIndex` | number | `packedArray.length` | optional The lastIndex used to convert the array.
`result` | Quaternion |  | optional The object into which to store the result.

##### Returns:

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

#### clone(result) → Quaternion
engine/Source/Core/Quaternion.js 1106

Duplicates this Quaternion instance.

Name | Type | Description
--- | --- | ---
`result` | Quaternion | optional The object onto which to store the result.

##### Returns:

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

#### equals(right) → boolean
engine/Source/Core/Quaternion.js 1117

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

Name | Type | Description
--- | --- | ---
`right` | Quaternion | optional The right hand side quaternion.

##### Returns:

`true` if left and right are equal, `false` otherwise.

#### equalsEpsilon(right, epsilon) → boolean
engine/Source/Core/Quaternion.js 1130

Compares this and the provided quaternion componentwise and returns `true` if they are within the provided epsilon, `false` otherwise.

Name | Type | Default | Description
--- | --- | --- | ---
`right` | Quaternion |  | optional The right hand side quaternion.
`epsilon` | number | `0` | optional The epsilon to use for equality testing.

##### Returns:

`true` if left and right are within the provided epsilon, `false` otherwise.

#### toString() → string
engine/Source/Core/Quaternion.js 1139

Returns a string representing this quaternion in the format (x, y, z, w).

##### Returns:

A string representing this Quaternion.

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