import { Euler } from "./Euler";
import { Matrix4 } from "./Matrix4";
import { Vector3 } from "./Vector3";
import { Vector4 } from "./Vector4";
export declare class Quaternion extends Vector4 {
    constructor(_x: number, _y: number, _z: number, _w: number);
    /**
     * Factory acting as constructor for vec4
     * @param x
     * @param y
     * @param z
     * @param w
     */
    static create(x?: number, y?: number, z?: number, w?: number): Quaternion;
    /**
     * Conversion function form Euler to Quaternion, taken from ThreeJS
     * @param euler euler (only order 'xyz' is implemented)
     */
    static createFromEuler(euler: Euler): Quaternion;
    /**
     * Sets this quaternion from rotation component of m.
     * assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
     * @param m Matrix4
     */
    static createFromRotationMatrix(m: Matrix4): Quaternion;
    /**
     * Build a unit quaternion representing the rotation
     * from u to v. The input vectors must be normalised.
     * @param u Vector3
     * @param v Vector3
     * @returns normalized Quat. if it can't be normalized, it returns {0, 0, 0, 1}
     */
    static createFromUnitVectors(u: Vector3, v: Vector3): Quaternion;
    /**
     * Build a unit quaternion representing the rotation
     * from u to v. The input vectors don't need to be normalised.
     * @param u Vector3
     * @param v Vector3
     * @returns normalized Quat. if it can't be normalized, it returns {0, 0, 0, 1}
     */
    static createFromVectors(u: Vector3, v: Vector3): Quaternion;
    /**
     * Creates a Quaternion for a rotation around given axis
     * @param axis Vector3
     * @param angle angle in radians
     */
    static CreateFromAxisAngle(axis: Vector3, angle: number): Quaternion;
    /**
     * Evaluates a rotation needed to be applied to an object positioned at sourcePoint to face destPoint
     * @param sourcePoint Vector3 - Coordinates of source point
     * @param destPoint Vector3 - Coordinates of destination point
     */
    /**
     * Returns the angle between two Quaternions
     * @param q1 Quaternion
     * @param q2 Quaternion
     */
    static angleBetween(q1: Quaternion, q2: Quaternion): number;
    /**
     * Adds two Quaternions and returns a new Quaternion.
     * @param q1 Quaternion
     * @param q2 Quaternion
     */
    static add(q1: Quaternion, q2: Quaternion): Quaternion;
    /**
     * Multiplies two Quaternions and returns a new Quaternion.
     * @param q1 Quaternion
     * @param q2 Quaternion
     */
    static multiply(q1: Quaternion, q2: Quaternion): Quaternion;
    static stringify(q: Quaternion): string;
}
