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

# Vector3

Класс, представляющий трехмерный вектор.

3Д-вектор — это три упорядоченных числа (обозначенных x, y и z), которые могут использоваться для представления ряда вещей, таких как:

- Точка в трехмерном пространстве.
- Направление и длина в трехмерном пространстве. В «Вердж3Д» длина равна Евклидову расстоянию (расстоянию по прямой) от `(0, 0, 0)` до `(x, y, z)`. Направление также измеряется от `(0, 0, 0)` до `(x, y, z)`.
- Три любых произвольно упорядоченных числа.

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

## Пример

`const a = new v3d.Vector3(0, 1, 0); // в отсутствии аргументов станет (0, 0, 0) const b = new v3d.Vector3(); const d = a.distanceTo(b);`

## Конструктор

### Vector3(x : Float, y : Float, z : Float)

- x — значение x этого вектора. По умолчанию `0`.
- y — значение y этого вектора. По умолчанию `0`.
- z — значение z этого вектора. По умолчанию `0`.

Создает новый Vector3.

## Свойства

### # .isVector3 : Boolean

Флаг, указывающий, что данный объект является экземпляром Vector3. Только для чтения.

### # .x : Float

### # .y : Float

### # .z : Float

## Методы

### # .add(v : Vector3) → this

Добавляет v к данному вектору.

### # .addScalar(s : Float) → this

Добавляет скалярное значение s к значениям x, y и z этого вектора.

### # .addScaledVector(v : Vector3, s : Float) → this

Добавляет v кратный s к текущему вектору.

### # .addVectors(a : Vector3, b : Vector3) → this

Устанавливает текущий вектор в a + b.

### # .applyAxisAngle(axis : Vector3, angle : Float) → this

- axis — нормализованный Vector3.
- angle — угол в радианах.

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

### # .applyEuler(euler : Euler) → this

Применяет преобразование Эйлера к текущему вектору путем преобразования углов Эйлера в кватернион и его последующего применения.

### # .applyMatrix3(m : Matrix3) → this

Умножает текущий вектор на m.

### # .applyMatrix4(m : Matrix4) → this

Умножает текущий вектор (с неявной 1 в 4-м измерении) и m, и делит на перспективу.

### # .applyNormalMatrix(m : Matrix3) → this

Умножает текущий вектор на нормальную матрицу m и нормализует результат.

### # .applyQuaternion(quaternion : Quaternion) → this

Применяет преобразование, заданное кватернионом, к текущему вектору.

### # .angleTo(v : Vector3) → Float

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

### # .ceil() → this

Компоненты x, y и z текущего вектора округляются вниз до ближайшего целого значения.

### # .clamp(min : Vector3, max : Vector3) → this

- min — минимальные значения x, y и z.
- max — максимальные значения x, y и z в нужном диапазоне.

Если значение x, y или z этого вектора больше, чем значение x, y или z вектора max, оно заменяется соответствующим значением. Если значение x, y или z этого вектора меньше, чем значение x, y или z вектора min, оно заменяется соответствующим значением.

### # .clampLength(min : Float, max : Float) → this

- min — минимальное значение, до которого будет ограничиваться длина.
- max — максимальное значение, до которого будет ограничиваться длина.

Если длина этого вектора больше значения max, то она становится max. Если длина этого вектора меньше значения min, она становится min.

### # .clampScalar(min : Float, max : Float) → this

- min — минимальное значение, на которое будут ограничиваться компоненты.
- max — максимальное значение, на которое будут ограничиваться компоненты.

Если значения x, y или z этого вектора больше максимального значения, они заменяются максимальным значением. Если значения x, y или z этого вектора меньше минимального значения, они заменяются минимальным значением.

### # .clone() → Vector3

Возвращает новый вектор с теми же значениями x, y и z, что и текущий.

### # .copy(v : Vector3) → this

Копирует значения свойств x, y и z из указанного вектора в текущий.

### # .cross(v : Vector3) → this

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

### # .crossVectors(a : Vector3, b : Vector3) → this

Устанавливает данный вектор в векторное произведение a и b.

### # .distanceTo(v : Vector3) → Float

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

### # .manhattanDistanceTo(v : Vector3) → Float

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

### # .distanceToSquared(v : Vector3) → Float

Вычисляет квадрат расстояния от данного вектора до v. Если вы просто сравниваете расстояние с другим расстоянием, то следует сравнивать расстояние в квадрате, так как оно вычисляется немного эффективнее.

### # .divide(v : Vector3) → this

Делит данный вектор на v.

### # .divideScalar(s : Float) → this

Делит данный вектор на скаляр s.

### # .dot(v : Vector3) → Float

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

### # .equals(v : Vector3) → Boolean

Проверяет строгое равенство данного вектора и v.

### # .floor() → this

Компоненты этого вектора округляются вниз до ближайшего целого значения.

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

- array — исходный массив.
- offset — (необ.) смещение в массиве. По умолчанию `0`.

Устанавливает значение x этого вектора в `array[offset]`, y в `array[offset + 1]` и z в `array[offset + 2]`.

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

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

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

### # .getComponent(index : Integer) → Float

index — `0`, `1` или `2`.

Если индекс равен 0, возвращается значение x. Если индекс равен 1, возвращается значение y. Если индекс равен 2, возвращается значение z.

### # .length() → Float

Вычисляет Евклидову длину (длину прямой линии) от `(0, 0, 0)` до `(x, y, z)`.

### # .manhattanLength() → Float

Вычисляет расстояние городских кварталов для текущего вектора.

### # .lengthSq() → Float

Вычисляет квадрат Евклидовой длины (длины прямой) от (0, 0, 0) до (x, y, z). Если вы сравниваете длины векторов, следует сравнивать квадрат длины, так как он вычисляется немного эффективнее.

### # .lerp(v : Vector3, alpha : Float) → this

- v — Vector3 для интерполяции.
- alpha — коэффициент интерполяции, обычно в замкнутом интервале `[0, 1]`.

Линейно интерполирует между текущим вектором и v, где alpha - процентное расстояние вдоль линии - alpha = 0 оставит текущий вектор, а alpha = 1 установит v.

### # .lerpVectors(v1 : Vector3, v2 : Vector3, alpha : Float) → this

- v1 — начальный Vector3.
- v2 — конечный Vector3.
- alpha — коэффициент интерполяции, обычно в замкнутом интервале `[0, 1]`.

Устанавливает текущий вектор как вектор, линейно интерполированный между v1 и v2, где alpha - процентное расстояние вдоль линии, соединяющей два вектора - alpha = 0 установит v1, а alpha = 1 установит v2.

### # .max(v : Vector3) → this

Если значение x, y или z этого вектора меньше значения x, y или z v, заменит это значение соответствующим значением max.

### # .min(v : Vector3) → this

Если значение x, y или z этого вектора больше, чем значение x, y или z v, заменит это значение соответствующим значением min.

### # .multiply(v : Vector3) → this

Умножает текущий вектор на v.

### # .multiplyScalar(s : Float) → this

Умножает текущий вектор на скаляр s.

### # .multiplyVectors(a : Vector3, b : Vector3) → this

Устанавливает текущий вектор равным a * b, покомпонентно.

### # .negate() → this

Инвертирует текущий вектор - то есть устанавливает `x = -x`, `y = -y` и `z = -z`.

### # .normalize() → this

Преобразует текущий вектор в единичный вектор — то есть, устанавливает его равным вектору с тем же направлением, что и текущий, но с длиной равной 1.

### # .project(camera : Camera) → this

camera — камера для проецирования.

Проецирует текущий вектор из мирового пространства в пространство нормализованных координат (NDC) камеры.

### # .projectOnPlane(planeNormal : Vector3) → this

planeNormal — вектор, представляющий нормаль к плоскости.

Проецирует текущий вектор на плоскость путем вычитания из него вектора, спроецированного на нормаль плоскости.

### # .projectOnVector(v : Vector3) → this

Проецирует текущий вектор на v.

### # .reflect(normal : Vector3) → this

normal — нормаль к отражающей плоскости.

Отражает текущий вектор от плоскости, ортогональной к normal. Предполагается, что нормаль имеет единичную длину.

### # .round() → this

Компоненты этого вектора округляются до ближайшего целого значения.

### # .roundToZero() → this

Компоненты этого вектора округляются в сторону нуля (вверх, если отрицательные, вниз, если положительные) до целого значения.

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

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

### # .setComponent(index : Integer, value : Float) → this

- index — `0`, `1` или `2`.
- value — Float.

Если индекс равен 0, устанавливает x в value. Если индекс равен 1, устанавливает y в value. Если индекс равен 2, устанавливает z в value.

### # .setFromCylindricalCoords(radius : Float, theta : Float, y : Float) → this

Устанавливает текущий вектор из цилиндрических координат `radius`, `theta` и `y`.

### # .setFromEuler(euler : Euler) → this

Устанавливает координаты x, y и z вектора из x, y, and z компонент указанных углов Эйлера.

### # .setFromMatrixColumn(matrix : Matrix4, index : Integer) → this

Устанавливает компоненты x, y и z текущего вектора из столбца index матрицы matrix.

### # .setFromMatrix3Column(matrix : Matrix3, index : Integer) → this

Устанавливает компоненты x, y и z текущего вектора из столбца index матрицы matrix.

### # .setFromMatrixPosition(m : Matrix4) → this

Устанавливает текущий вектор в элементы позиции матрицы преобразования m.

### # .setFromMatrixScale(m : Matrix4) → this

Устанавливает текущий вектор на масштабные элементы матрицы преобразования m.

### # .setFromSpherical(s : Spherical) → this

Задает текущий вектор из сферических координат s.

### # .setFromSphericalCoords(radius : Float, phi : Float, theta : Float) → this

Задает текущий вектор из сферических координат radius, phi и theta.

### # .setLength(l : Float) → this

Устанавливает текущий вектор в вектор с тем же направлением, что и этот, но с длиной равной l.

### # .setScalar(scalar : Float) → this

Устанавливает значения x, y и z текущего вектора равными scalar.

### # .setX(x : Float) → this

Заменяет значение x текущего вектора на x.

### # .setY(y : Float) → this

Заменяет значение y текущего вектора на y.

### # .setZ(z : Float) → this

Заменяет значение z текущего вектора на z.

### # .sub(v : Vector3) → this

Вычитает v из текущего вектора.

### # .subScalar(s : Float) → this

Вычитает s из компонент x, y и z текущего вектора.

### # .subVectors(a : Vector3, b : Vector3) → this

Устанавливает текущий вектор в a - b.

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

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

Возвращает массив [x, y, z], или копирует x, y и z в предоставленный массив.

### # .transformDirection(m : Matrix4) → this

Преобразует направление текущего вектора по матрице (левое верхнее подмножество 3 x 3 из m) и затем нормализует результат.

### # .unproject(camera : Camera) → this

camera — камера для проецирования.

Проецирует текущий вектор из пространства нормализованных координат (NDC) камеры в мировое пространство.

### # .random() → this

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

### # .randomDirection() → this

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

## Пазлы

Следующие пазлы могут использоваться для работы с векторами без необходимости писать код:

- create vector
- set vector value
- get vector value
- vector math

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

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