Quaternion

Реализует повороты с помощью кватернионов.

Перечисление Quaternion выдаёт его координаты (x, y, z, w) в том же порядке.

Пример

const quaternion = new v3d.Quaternion(); quaternion.setFromAxisAngle(new v3d.Vector3(0, 1, 0), Math.PI / 2); const vector = new v3d.Vector3(1, 0, 0); vector.applyQuaternion(quaternion);

Конструктор

Quaternion(x : Float, y : Float, z : Float, w : Float)

Свойства

.isQuaternion : Boolean

Указывает, что объект является экземпляром класса Quaternion. Только для чтения.

.x : Float

.y : Float

.z : Float

.w : Float

Методы

.angleTo(q : Quaternion) → Float

Возвращает угол между этим кватернионом и кватернионом q в радианах.

.clone() → Quaternion

Создает новый кватернион со свойствами x, y, z и w, идентичными данному.

.conjugate() → this

Возвращает вращательную конъюгату данного кватерниона. Сопряженный кватернион представляет собой одно и то же вращение в противоположном направлении вокруг оси вращения.

.copy(q : Quaternion) → this

Копирует свойства x, y, z и w из q в данный кватернион.

.equals(v : Quaternion) → Boolean

v — кватернион, с которым будет сравниваться данный кватернион.

Сравнивает свойства x, y, z и w v с эквивалентными свойствами текущего кватерниона, чтобы определить, представляют ли они одно и то же вращение.

.dot(v : Quaternion) → Float

Вычисляет скалярное произведение кватернионов v и данного.

.fromArray(array : Array, offset : Integer) → this

Устанавливает свойства x, y, z и w текущего кватерниона из массива.

.identity() → this

Устанавливает текущий кватернион в кватернион тождества; то есть в кватернион, который представляет "отсутствие вращения".

.invert() → this

Инвертирует данный кватернион - вычисляет conjugate. Предполагается, что кватернион имеет единичную длину.

.length() → Float

Вычисляет Евклидову метрику (длину прямой линии) данного кватерниона, рассматриваемого как 4-мерный вектор.

.lengthSq() → Float

Вычисляет квадрат Евклидова расстояния (длины прямой) данного кватерниона, рассматриваемого как 4-мерный вектор. Это может быть полезно, если вы сравниваете длины двух кватернионов, так как это немного более эффективное вычисление, чем length().

.normalize() → this

Нормализует текущий кватернион - то есть вычисляет кватернион, который выполняет то же вращение, что и текущий, но имеет длину равную 1.

.multiply(q : Quaternion) → this

Умножает данный кватернион на q.

.multiplyQuaternions(a : Quaternion, b : Quaternion) → this

Устанавливает текущий кватернион в a x b. Адаптация метода, изложенного здесь.

.premultiply(q : Quaternion) → this

Предварительно умножает текущий кватернион на q.

.random() → this

Устанавливает текущий кватернион в случайный нормализованный кватернион.

.rotateTowards(q : Quaternion, step : Float) → this

Поворачивает данный кватернион на заданный угловой шаг к определенному кватерниону q. Метод гарантирует, что конечный кватернион не будет превышать q.

.slerp(qb : Quaternion, t : Float) → this

Обрабатывает сферическую линейную интерполяцию между кватернионами. t представляет собой величину поворота между данным кватернионом (где t равно 0) и qb (где t равно 1). Этот кватернион устанавливается в результат. Также смотрите статическую версию slerp ниже.

// повернуть меш в направлении целевого кватерниона mesh.quaternion.slerp(endQuaternion, 0.01);

.set(x : Float, y : Float, z : Float, w : Float) → this

Задает x, y, z, w свойства текущего кватерниона.

.setFromAxisAngle(axis : Vector3, angle : Float) → this

Устанавливает текущий кватернион из вращения, заданного осью axis и углом angle.

Адаптация следующего метода. axis (ось) предполагается нормализованной, angle (угол) — в радианах.

.setFromEuler(euler : Euler) → this

Устанавливает текущий кватернион из вращения, заданного углом Эйлера.

.setFromRotationMatrix(m : Matrix4) → this

m — a Matrix4 Matrix4, из которых верхняя 3x3 матрица является чистой матрицей вращения (т.е. немасштабированной).

Устанавливает текущий кватернион из компонента вращения m. Адаптация следующего метода.

.setFromUnitVectors(vFrom : Vector3, vTo : Vector3) → this

Применяет к данному кватерниону вращение, необходимое для поворота вектора направления vFrom к вектору направления vTo. Предполагается, что vFrom и vTo нормализованы.

.slerpQuaternions(qa : Quaternion, qb : Quaternion, t : Float) → this

Производит сферическую интерполяцию между указанными кватернионами и сохраняет результат в текущий кватернион.

.toArray(array : Array, offset : Integer) → Array

Возвращает числовые элементы данного кватерниона в массиве формата [x, y, z, w].

.fromBufferAttribute(attribute : BufferAttribute, index : Integer) → this

Устанавливает x, y, z, w свойства текущего кватерниона из атрибута BufferAttribute.

Статические методы

.slerpFlat(dst : Array, dstOffset : Integer, src0 : Array, srcOffset0 : Integer, src1 : Array, srcOffset1 : Integer, t : Float)

Подобен статическому методу .slerp выше, но работает непосредственно с плоскими массивами чисел.

.multiplyQuaternionsFlat(dst : Array, dstOffset : Integer, src0 : Array, srcOffset0 : Integer, src1 : Array, srcOffset1 : Integer) → Array

Эта реализация умножения кватернионов предполагает, что данные находятся в плоских массивах.

Исходный файл

О том как получить исходный код этого модуля читайте тут.