import { Nullable, Quaternion, Vector3 } from "@babylonjs/core"; import { Basis } from "./basis"; import { FilterParams } from "./filter"; export declare class CloneableQuaternionLite { x: number; y: number; z: number; w: number; constructor(q: Nullable); } export declare class CloneableQuaternion extends CloneableQuaternionLite { private readonly _baseBasis; get baseBasis(): Basis; constructor(q: Nullable, basis?: Basis); set(q: Quaternion): void; rotateBasis(q: Quaternion): Basis; } export interface CloneableQuaternionMap { [key: string]: CloneableQuaternion; } export type CloneableQuaternionList = CloneableQuaternion[]; export declare const cloneableQuaternionToQuaternion: (q: CloneableQuaternionLite) => Quaternion; export declare class FilteredQuaternion { private mainFilter; private readonly gaussianVectorFilter; private _t; get t(): number; set t(value: number); private _rot; get rot(): Quaternion; constructor(params?: FilterParams); updateRotation(rot: Quaternion): void; } export type FilteredQuaternionList = FilteredQuaternion[]; export declare enum AXIS { x = 0, y = 1, z = 2, xy = 3, yz = 4, xz = 5, xyz = 6, none = 10 } export declare const RadToDeg: (r: number) => number; export declare const DegToRad: (d: number) => number; /** * Check a quaternion is valid * @param q Input quaternion */ export declare function checkQuaternion(q: Quaternion): boolean; export declare const quaternionBetweenVectors: (v1: Vector3, v2: Vector3) => Quaternion; /** * Same as above, Euler angle version * @param v1 Input rotation in degrees 1 * @param v2 Input rotation in degrees 2 * @param remapDegree Whether re-map degrees */ export declare const degreeBetweenVectors: (v1: Vector3, v2: Vector3, remapDegree?: boolean) => Vector3; /** * Re-map degrees to -180 to 180 * @param deg Input angle in Degrees */ export declare const remapDegreeWithCap: (deg: number) => number; /** * Convert quaternions to degrees * @param q Input quaternion * @param remapDegree whether re-map degrees */ export declare const quaternionToDegrees: (q: Quaternion, remapDegree?: boolean) => Vector3; /** * Check whether two directions are close enough within a small values * @param v1 Input direction 1 * @param v2 Input direction 2 * @param eps Error threshold */ export declare function vectorsSameDirWithinEps(v1: Vector3, v2: Vector3, eps?: number): boolean; /** * Test whether two quaternions have equal effects * @param q1 Input quaternion 1 * @param q2 Input quaternion 2 */ export declare function testQuaternionEqualsByVector(q1: Quaternion, q2: Quaternion): boolean; /** * Same as above, Euler angle version * @param d1 Input degrees 1 * @param d2 Input degrees 2 */ export declare function degreesEqualInQuaternion(d1: Vector3, d2: Vector3): boolean; /** * Reverse rotation Euler angles on given axes * @param q Input quaternion * @param axis Axes to reverse */ export declare const reverseRotation: (q: Quaternion, axis: AXIS) => Quaternion; /** * Remove rotation on given axes. * Optionally capping rotation (in Euler angles) on two axes. * This operation assumes re-mapped degrees. * @param q Input quaternion * @param axis Axes to remove * @param capAxis1 Capping axis 1 * @param capLow1 Axis 1 lower range * @param capHigh1 Axis 1 higher range * @param capAxis2 Capping axis 2 * @param capLow2 Axis 2 lower range * @param capHigh2 Axis 2 higher range */ export declare const removeRotationAxisWithCap: (q: Quaternion, axis: AXIS, capAxis1?: AXIS, capLow1?: number, capHigh1?: number, capAxis2?: AXIS, capLow2?: number, capHigh2?: number) => Quaternion; /** * Switch rotation axes. * @param q Input quaternion * @param axis1 Axis 1 to switch * @param axis2 Axis 2 to switch */ export declare const exchangeRotationAxis: (q: Quaternion, axis1: AXIS, axis2: AXIS) => Quaternion; export declare function printQuaternion(q: Quaternion, s?: string): void; /** * Result is in Radian on unit sphere (r = 1). * Canonical ISO 80000-2:2019 convention. * @param pos Euclidean local position * @param basis Local coordinate system basis */ export declare function calcSphericalCoord(pos: Vector3, basis: Basis): number[]; /** * Assuming rotation starts from (1, 0, 0) in local coordinate system. * @param basis Local coordinate system basis * @param theta Polar angle * @param phi Azimuthal angle * @param prevQuaternion Parent quaternion to the local system */ export declare function sphericalToQuaternion(basis: Basis, theta: number, phi: number, prevQuaternion: Quaternion): Quaternion; export declare function scaleRotation(quaternion: Quaternion, scale: number): Quaternion;