import { Euler } from './Euler';
import { Matrix4 } from './Matrix4';
import { Vector3 } from './Vector3';
declare class Quaternion {
    static slerp(qa: Quaternion, qb: Quaternion, qm: Quaternion, t: number): Quaternion;
    static slerpFlat(dst: number[], dstOffset: number, src0: number[], srcOffset0: number, src1: number[], srcOffset1: number, t: number): void;
    static multiplyQuaternionsFlat(dst: number[], dstOffset: number, src0: number[], srcOffset0: number, src1: number[], srcOffset1: number): number[];
    readonly isQuaternion: boolean;
    _x: number;
    _y: number;
    _z: number;
    _w: number;
    constructor(x?: number, y?: number, z?: number, w?: number);
    get x(): number;
    set x(value: number);
    get y(): number;
    set y(value: number);
    get z(): number;
    set z(value: number);
    get w(): number;
    set w(value: number);
    set(x: number, y: number, z: number, w: number): this;
    clone(): Quaternion;
    copy(quaternion: Quaternion): this;
    setFromEuler(euler: Euler): this;
    setFromAxisAngle(axis: Vector3, angle: number): this;
    setFromRotationMatrix(m: Matrix4): this;
    setFromUnitVectors(vFrom: Vector3, vTo: Vector3): this;
    angleTo(q: Quaternion): number;
    rotateTowards(q: Quaternion, step: number): this;
    identity(): this;
    invert(): this;
    conjugate(): this;
    dot(v: Quaternion): number;
    lengthSq(): number;
    length(): number;
    normalize(): this;
    multiply(q: Quaternion): this;
    premultiply(q: Quaternion): this;
    multiplyQuaternions(a: Quaternion, b: Quaternion): this;
    slerp(qb: Quaternion, t: number): this;
    equals(quaternion: Quaternion): boolean;
    fromArray(array: number[] | ArrayLike<number>, offset?: number): this;
    toArray(array?: number[], offset?: number): number[];
    _onChange(callback: Function): this;
    _onChangeCallback: Function;
}
export { Quaternion };
