# Quaternion

The Quaternion class represents a quaternion. Quaternions are used to describe rotation in 3D space. Quaternion contains several helpful static functions, which can be called like this: Quaternion.multiply(quat1, quat2). Objects of the Quaternion class have 4 number properties: x, y, z, and w.

Function Description
inverse()

Inverts the quaternion.

toEuler()

Converts from Quaternion to Euler angles (in degrees).

Static Function Description
angle(quat1, quat2)

Returns the angle between two Quaternions.

fromEuler(pitch, yaw, roll)

Converts from Euler angles to Quaternion.

lerp(quat1, quat2, t)

Interpolates between two Quaternions using linear interpolation and returns the result.

lookAt(lookStart, lookEnd)

Returns a Quaternion oriented to the given 3D coordinates.

multiply(quat1, quat2)

Multiplies the given Quaternions and returns the result.

slerp(quat1, quat2, t)

Interpolates between two Quaternions using spherical spline interpolation and returns the result.

## inverse()

Inverts the quaternion.

### Returns

boolean true if the inversion was successful, false if not

## toEuler()

Converts from Quaternion to Euler angles (in degrees).

### Returns

Vec3 the {x, y, z} yaw, pitch, and roll Euler angles

## angle(quat1, quat2)

Returns the angle between two Quaternions.

### Parameters

Quaternion quat1 – the first Quaternion
Quaternion quat2 – the second Quaternion

### Returns

number – the resulting angle

## fromEuler(pitch, yaw, roll)

Converts from Euler angles to Quaternion.

### Parameters

number pitch – the x-axis component
number yaw – the y-axis component
number roll – the z-axis component

### Returns

Quaternion the resulting Quaternion

## lerp(quat1, quat2, t)

Interpolates between two quaternions using linear interpolation and returns the result. Less accurate than slerp() but more efficient. The interpolation curve for linear interpolation between quaternions gives a straight line in quaternion space.

### Parameters

Quaternion quat1 – the first Quaternion
Quaternion quat2 – the second Quaternion
number t the interpolation coefficient

### Returns

Quaternion the resulting Quaternion

## lookAt(lookStart, lookEnd)

Returns a Quaternion oriented to the given 3D coordinates.

### Parameters

Vec3 lookStart – the first set of 3D coordinates
Vec3 lookEnd – the second set of 3D coordinates

### Returns

Quaternion – the resulting Quaternion

```let _target;

function start(){
_target = this.scene().findFirst("Cube");
}

function update(dt){
// rotate the projectile to face the target
let currentQuat = this.entity().rotationQuat();
let nextQuat = Quaternion.lookAt(this.entity().position(), _target.position());
nextQuat = Quaternion.slerp(currentQuat, nextQuat, 0.5);
this.entity().setRotationQuat(nextQuat);

// move the projectile toward the target in an arcing movement
let mat = Mat4.createRotation(nextQuat);
let forward = Mat4.transformPoint(mat, new Vec3(1, 1, -1));
let curPos = this.entity().position();
this.entity().setPosition(
curPos.x + 0.1 * forward.x,
curPos.y + 0.1 * forward.y,
curPos.z + 0.1 * forward.z);
}```

## multiply(quat1, quat2)

Multiplies the given Quaternions and returns the result.

### Parameters

Quaternion quat1 – the first Quaternion
Quaternion quat2 – the second Quaternion

### Returns

Quaternion – the resulting Quaternion

## slerp(quat1, quat2, alpha)

Interpolates between two Quaternions using spherical spline interpolation and returns the result. More accurate than lerp() but less efficient. Spherical spline interpolation provides smooth transitions between different orientations and is often useful for animating models or cameras in 3D.

### Parameters

Quaternion quat1 – the first Quaternion
Quaternion quat2 – the second Quaternion
number t the interpolation coefficient

### Returns

Quaternion the resulting Quaternion