import { Vector3 } from '.';
import { Matrix4 } from './Matrix4';
export declare class Quaternion {
    x: number;
    y: number;
    z: number;
    w: number;
    isIdentity: boolean;
    static Identity: Quaternion;
    constructor(x?: number, y?: number, z?: number, w?: number);
    /**
     * Compares the x, y, z and w properties of q to the equivalent properties of this quaternion to determine if they represent the same rotation.
     */
    equals(q: Quaternion): boolean;
    /**
     * Returns a new Quaternion with identical x, y, z and w properties to this one.
     */
    clone(): Quaternion;
    /**
     * Returns the angle between this quaternion and quaternion q in radians.
     */
    angleTo(q: Quaternion): number;
    /**
     * Computes the Euclidean length (straight-line length) of this quaternion, considered as a 4 dimensional vector.
     */
    length(): number;
    /**
     * Computes the squared Euclidean length (straight-line length) of this quaternion, considered as a 4 dimensional vector.
     */
    lengthSqr(): number;
    /**
     * Returns dot product of 2 quaternions.
     */
    static dot(q1: Quaternion, q2: Quaternion): number;
    /**
     * Adds each element in one quaternion with its corresponding element in a second quaternion.
     */
    static add(q1: Quaternion, q2: Quaternion): Quaternion;
    /**
     * Subtracts each element in a second quaternion from its corresponding element in a first quaternion.
     */
    static sub(v1: Quaternion, v2: Quaternion): Quaternion;
    /**
     * Returns the conjugate of a specified quaternion.
     */
    static conjugate(q: Quaternion): Quaternion;
    /**
     * Returns the inverse of a quaternion.
     */
    static invert(q: Quaternion): Quaternion;
    /**
     * Divides each component of a specified Quaternion by its length.
     */
    static normalize(q: Quaternion): Quaternion;
    /**
     * Returns the quaternion that results from multiplying two quaternions together.
     */
    static multiply(q1: Quaternion, q2: Quaternion): Quaternion;
    /**
     * Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor.
     */
    static multiplyScalar(q: Quaternion, s: number): Quaternion;
    /**
     * Divides one quaternion by a second quaternion.
     */
    static divide(q1: Quaternion, q2: Quaternion): Quaternion;
    /**
     * Interpolates between two quaternions, using spherical linear interpolation.
     */
    static slerp(q1: Quaternion, q2: Quaternion, t: number): Quaternion;
    /**
     * Linearly interpolate between 2 quaternions,
     * where alpha is the percent distance along the line - alpha = 0 will be this vector,
     * and alpha = 1 will be v.
     */
    static lerp(q1: Quaternion, q2: Quaternion, t: number): Quaternion;
    /**
     * Concatenates two quaternions.
     */
    static concat(q1: Quaternion, q2: Quaternion): Quaternion;
    /**
     * Reverses the sign of each component of the quaternion.
     */
    static negate(q: Quaternion): Quaternion;
    /**
     * Creates a quaternion from a unit vector and an angle to rotate around the vector.
     */
    static createFromAxisAngle(axis: Vector3, angle: number): Quaternion;
    /**
     * Creates a quaternion from the specified rotation matrix.
     */
    static createFromRotationMatrix(m: Matrix4): Quaternion;
    /**
     * Creates a new quaternion from the given yaw, pitch, and roll.
     * @param yaw Angle of rotation, in radians, around the Y-axis.
     * @param pitch Angle of rotation, in radians, around the X-axis.
     * @param roll Angle of rotation, in radians, around the Z-axis.
     */
    static createFromYawPitchRoll(yaw: number, pitch: number, roll: number): Quaternion;
}
