## Overview

The following functions manipulate quaternions.

## Summary

|                                                                                                         Functions                                                                                                         ||
|-----------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------|
| [rsQuaternionAdd](https://developer.android.com/guide/topics/renderscript/reference/rs_quaternion#android_rs:rsQuaternionAdd)                       | Add two quaternions                                                  |
| [rsQuaternionConjugate](https://developer.android.com/guide/topics/renderscript/reference/rs_quaternion#android_rs:rsQuaternionConjugate)           | Conjugate a quaternion                                               |
| [rsQuaternionDot](https://developer.android.com/guide/topics/renderscript/reference/rs_quaternion#android_rs:rsQuaternionDot)                       | Dot product of two quaternions                                       |
| [rsQuaternionGetMatrixUnit](https://developer.android.com/guide/topics/renderscript/reference/rs_quaternion#android_rs:rsQuaternionGetMatrixUnit)   | Get a rotation matrix from a quaternion                              |
| [rsQuaternionLoadRotate](https://developer.android.com/guide/topics/renderscript/reference/rs_quaternion#android_rs:rsQuaternionLoadRotate)         | Create a rotation quaternion                                         |
| [rsQuaternionLoadRotateUnit](https://developer.android.com/guide/topics/renderscript/reference/rs_quaternion#android_rs:rsQuaternionLoadRotateUnit) | Quaternion that represents a rotation about an arbitrary unit vector |
| [rsQuaternionMultiply](https://developer.android.com/guide/topics/renderscript/reference/rs_quaternion#android_rs:rsQuaternionMultiply)             | Multiply a quaternion by a scalar or another quaternion              |
| [rsQuaternionNormalize](https://developer.android.com/guide/topics/renderscript/reference/rs_quaternion#android_rs:rsQuaternionNormalize)           | Normalize a quaternion                                               |
| [rsQuaternionSet](https://developer.android.com/guide/topics/renderscript/reference/rs_quaternion#android_rs:rsQuaternionSet)                       | Create a quaternion                                                  |
| [rsQuaternionSlerp](https://developer.android.com/guide/topics/renderscript/reference/rs_quaternion#android_rs:rsQuaternionSlerp)                   | Spherical linear interpolation between two quaternions               |

## Functions

#### rsQuaternionAdd
: Add two quaternions

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsQuaternionAdd([rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q, const [rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* rhs); |   |

##### Parameters

|  q  | Destination quaternion to add to. |
| rhs |        Quaternion to add.         |
|-----|-----------------------------------|

Adds two quaternions, i.e. `*q += *rhs;`  

#### rsQuaternionConjugate
: Conjugate a quaternion

|-------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsQuaternionConjugate([rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q); |   |

##### Parameters

| q | Quaternion to modify. |
|---|-----------------------|

Conjugates the quaternion.  

#### rsQuaternionDot
: Dot product of two quaternions

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| float rsQuaternionDot(const [rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q0, const [rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q1); |   |

##### Parameters

| q0 | First quaternion.  |
| q1 | Second quaternion. |
|----|--------------------|

Returns the dot product of two quaternions.  

#### rsQuaternionGetMatrixUnit
: Get a rotation matrix from a quaternion

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsQuaternionGetMatrixUnit([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m, const [rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q); |   |

##### Parameters

| m |   Resulting matrix.    |
| q | Normalized quaternion. |
|---|------------------------|

Computes a rotation matrix from the normalized quaternion.  

#### rsQuaternionLoadRotate
: Create a rotation quaternion

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsQuaternionLoadRotate([rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q, float rot, float x, float y, float z); |   |

##### Parameters

|  q  | Destination quaternion.  |
| rot |   Angle to rotate by.    |
|  x  | X component of a vector. |
|  y  | Y component of a vector. |
|  z  | Z component of a vector. |
|-----|--------------------------|

Loads a quaternion that represents a rotation about an arbitrary vector
(doesn't have to be unit)  

#### rsQuaternionLoadRotateUnit
: Quaternion that represents a rotation about an arbitrary unit vector

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsQuaternionLoadRotateUnit([rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q, float rot, float x, float y, float z); |   |

##### Parameters

|  q  |     Destination quaternion.     |
| rot | Angle to rotate by, in radians. |
|  x  |   X component of the vector.    |
|  y  |   Y component of the vector.    |
|  z  |   Z component of the vector.    |
|-----|---------------------------------|

Loads a quaternion that represents a rotation about an arbitrary unit vector.  

#### rsQuaternionMultiply
: Multiply a quaternion by a scalar or another quaternion

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsQuaternionMultiply([rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q, const [rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* rhs); |   |
| void rsQuaternionMultiply([rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q, float scalar);                                                                                                                           |   |

##### Parameters

|   q    |                Destination quaternion.                |
| scalar |         Scalar to multiply the quaternion by.         |
|  rhs   | Quaternion to multiply the destination quaternion by. |
|--------|-------------------------------------------------------|

Multiplies a quaternion by a scalar or by another quaternion, e.g.
`*q = *q * scalar;` or `*q = *q * *rhs;`.  

#### rsQuaternionNormalize
: Normalize a quaternion

|-------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsQuaternionNormalize([rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q); |   |

##### Parameters

| q | Quaternion to normalize. |
|---|--------------------------|

Normalizes the quaternion.  

#### rsQuaternionSet
: Create a quaternion

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsQuaternionSet([rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q, const [rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* rhs); |   |
| void rsQuaternionSet([rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q, float w, float x, float y, float z);                                                                                                     |   |

##### Parameters

|  q  | Destination quaternion. |
|  w  |      W component.       |
|  x  |      X component.       |
|  y  |      Y component.       |
|  z  |      Z component.       |
| rhs |   Source quaternion.    |
|-----|-------------------------|

Creates a quaternion from its four components or from another quaternion.  

#### rsQuaternionSlerp
: Spherical linear interpolation between two quaternions

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsQuaternionSlerp([rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q, const [rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q0, const [rs_quaternion](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_quaternion)\* q1, float t); |   |

##### Parameters

| q  | Result quaternion from the interpolation. |
| q0 |          First input quaternion.          |
| q1 |         Second input quaternion.          |
| t  |        How much to interpolate by.        |
|----|-------------------------------------------|

Performs spherical linear interpolation between two quaternions.