import { float4, float3x3, float3 } from "./vector"; declare class _quat { v: float4; constructor(v: float4); create(v: float4): this; neg(): this; conj(): this; add(b: this): _quat; sub(b: this): _quat; mul(b: this): this; div(b: this): this; scale(n: number): _quat; recip(): this; mag(): any; magsq(): any; normalise(): _unitQuat; closest(b: quaternion): this; to3x3(): float3x3; transform(v: float3): float3; toString(): string; } export type quaternion = _quat; export declare const quaternion: ((v: float4) => _quat) & { exp(q: quaternion): _quat; log(q: quaternion): quaternion; }; export default quaternion; declare class _unitQuat extends _quat { recip(): this; cosang(b: this): number; to3x3(): float3x3; rotate(v: float3): float3; toAxisAngle(): { axis: float3; angle: number; }; toEulerZYX(): float3; } export type unitQuaternion = _unitQuat; export declare const unitQuaternion: ((v: float4) => _unitQuat) & { identity(): _unitQuat; from3x3(mat: float3x3): unitQuaternion; fromEulerZYX(angles: float3): unitQuaternion; fromAxisAngle(axis: float3, angle: number): unitQuaternion; between(a: float3, b: float3): _unitQuat; pow(q: unitQuaternion, y: number): _unitQuat; log(q: unitQuaternion): quaternion; slerp(a: unitQuaternion, b: unitQuaternion, t: number): unitQuaternion; squad(q0: unitQuaternion, a: unitQuaternion, b: unitQuaternion, q1: unitQuaternion, t: number): unitQuaternion; };