@types/three
Version:
TypeScript definitions for three
190 lines (158 loc) • 5.44 kB
TypeScript
import { BufferAttribute } from "../core/BufferAttribute.js";
import { InterleavedBufferAttribute } from "../core/InterleavedBufferAttribute.js";
import { Euler } from "./Euler.js";
import { Matrix4 } from "./Matrix4.js";
import { Vector3, Vector3Like } from "./Vector3.js";
export interface QuaternionLike {
readonly x: number;
readonly y: number;
readonly z: number;
readonly w: number;
}
export type QuaternionTuple = [x: number, y: number, z: number, w: number];
/**
* Implementation of a quaternion. This is used for rotating things without incurring in the dreaded gimbal lock issue, amongst other advantages.
*
* @example
* const quaternion = new THREE.Quaternion();
* quaternion.setFromAxisAngle( new THREE.Vector3( 0, 1, 0 ), Math.PI / 2 );
* const vector = new THREE.Vector3( 1, 0, 0 );
* vector.applyQuaternion( quaternion );
*/
export class Quaternion {
/**
* @param x x coordinate
* @param y y coordinate
* @param z z coordinate
* @param w w coordinate
*/
constructor(x?: number, y?: number, z?: number, w?: number);
/**
* @default 0
*/
x: number;
/**
* @default 0
*/
y: number;
/**
* @default 0
*/
z: number;
/**
* @default 1
*/
w: number;
readonly isQuaternion: true;
/**
* Sets values of this quaternion.
*/
set(x: number, y: number, z: number, w: number): this;
/**
* Clones this quaternion.
*/
clone(): this;
/**
* Copies values of q to this quaternion.
*/
copy(q: QuaternionLike): this;
/**
* Sets this quaternion from rotation specified by Euler angles.
*/
setFromEuler(euler: Euler, update?: boolean): this;
/**
* Sets this quaternion from rotation specified by axis and angle.
* Adapted from http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm.
* Axis have to be normalized, angle is in radians.
*/
setFromAxisAngle(axis: Vector3Like, angle: number): this;
/**
* Sets this quaternion from rotation component of m. Adapted from http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm.
*/
setFromRotationMatrix(m: Matrix4): this;
setFromUnitVectors(vFrom: Vector3, vTo: Vector3Like): this;
angleTo(q: Quaternion): number;
rotateTowards(q: Quaternion, step: number): this;
identity(): this;
/**
* Inverts this quaternion.
*/
invert(): this;
conjugate(): this;
dot(v: Quaternion): number;
lengthSq(): number;
/**
* Computes length of this quaternion.
*/
length(): number;
/**
* Normalizes this quaternion.
*/
normalize(): this;
/**
* Multiplies this quaternion by b.
*/
multiply(q: Quaternion): this;
premultiply(q: Quaternion): this;
/**
* Sets this quaternion to a x b
* Adapted from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm.
*/
multiplyQuaternions(a: Quaternion, b: Quaternion): this;
slerp(qb: Quaternion, t: number): this;
slerpQuaternions(qa: Quaternion, qb: Quaternion, t: number): this;
equals(v: Quaternion): boolean;
/**
* Sets this quaternion's x, y, z and w value from the provided array or array-like.
* @param array the source array or array-like.
* @param offset (optional) offset into the array. Default is 0.
*/
fromArray(array: number[] | ArrayLike<number>, offset?: number): this;
/**
* Returns an array [x, y, z, w], or copies x, y, z and w into the provided array.
* @param array (optional) array to store the quaternion to. If this is not provided, a new array will be created.
* @param offset (optional) optional offset into the array.
* @return The created or provided array.
*/
toArray(array?: number[], offset?: number): number[];
toArray(array?: QuaternionTuple, offset?: 0): QuaternionTuple;
/**
* Copies x, y, z and w into the provided array-like.
* @param array array-like to store the quaternion to.
* @param offset (optional) optional offset into the array.
* @return The provided array-like.
*/
toArray(array: ArrayLike<number>, offset?: number): ArrayLike<number>;
/**
* This method defines the serialization result of Quaternion.
* @return The numerical elements of this quaternion in an array of format [x, y, z, w].
*/
toJSON(): [number, number, number, number];
/**
* Sets x, y, z, w properties of this quaternion from the attribute.
* @param attribute the source attribute.
* @param index index in the attribute.
*/
fromBufferAttribute(attribute: BufferAttribute | InterleavedBufferAttribute, index: number): this;
_onChange(callback: () => void): this;
_onChangeCallback: () => void;
static slerpFlat(
dst: number[],
dstOffset: number,
src0: number[],
srcOffset: number,
src1: number[],
stcOffset1: number,
t: number,
): void;
static multiplyQuaternionsFlat(
dst: number[],
dstOffset: number,
src0: number[],
srcOffset: number,
src1: number[],
stcOffset1: number,
): number[];
random(): this;
[Symbol.iterator](): Generator<number, void>;
}