Quaternion - Руководство по Вердж3Д - Софт Эйт Софт
Description: Узнайте как использовать Quaternion в интерактивных 3Д-веб-приложениях сделанных на Вердж3Д

# 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)

- x — x координата.
- y — y координата.
- z — z координата.
- w — w координата.

## Свойства

### # .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

- array — массив формата (x, y, z, w), используемого для построения кватерниона.
- offset — (необ.) смещение в массиве.

Устанавливает свойства 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 — целевой кватернион.
- step — угловой шаг в радианах.

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

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

- qb — кватернион.
- t — коэффициент интерполяции в замкнутом интервале `[0, 1]`.

Обрабатывает сферическую линейную интерполяцию между кватернионами. 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

- array — (необ.) массив для хранения кватерниона. Если он не указан, будет создан новый массив.
- offset — (необ.) если указан, результат будет скопирован в данный Array.

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

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

- attribute — атрибут источника.
- index — индекс в атрибуте.

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

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

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

- dst — выходной массив.
- dstOffset — смещение в выходном массиве.
- src0 — исходный массив начального кватерниона.
- srcOffset0 — смещение в массиве `src0`.
- src1 — исходный массив целевого кватнериона.
- srcOffset1 — смещение в массиве `src1`.
- t — нормированный коэффициент интерполяции (от 0 до 1).

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

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

- dst — выходной массив.
- dstOffset — смещение в выходном массиве.
- src0 — исходный массив начального кватерниона.
- srcOffset0 — смещение в массиве `src0`.
- src1 — исходный массив целевого кватнериона.
- srcOffset1 — смещение в массиве `src1`.

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

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

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