Класс pc.Vec3: сложение, вычитание, нормализация, скалярное и векторное произведение

Класс pc.Vec3 в библиотеке PlayCanvas предназначен для работы с трехмерными векторами. Он включает множество методов для математических операций, таких как сложение, вычитание, нормализация, скалярное и векторное произведение, что позволяет эффективно работать с пространственными объектами в 3D-пространстве. В этой статье рассматриваются основные операции, которые можно выполнить с объектами типа pc.Vec3.

Сложение векторов

Сложение векторов — одна из базовых операций векторной математики. Для двух векторов A и B результатом сложения будет новый вектор, компоненты которого равны сумме соответствующих компонент этих векторов.

var vecA = new pc.Vec3(1, 2, 3);
var vecB = new pc.Vec3(4, 5, 6);
var result = vecA.add(vecB);
console.log(result);  // Vec3 { x: 5, y: 7, z: 9 }

Метод add изменяет текущий вектор, добавляя к нему компоненты другого вектора. Если необходимо создать новый вектор без изменения исходных объектов, можно воспользоваться перегрузкой метода add:

var result = vecA.add(vecB);  // vecA остается неизменным

Вычитание векторов

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

var vecA = new pc.Vec3(5, 6, 7);
var vecB = new pc.Vec3(2, 3, 4);
var result = vecA.sub(vecB);
console.log(result);  // Vec3 { x: 3, y: 3, z: 3 }

Метод sub работает аналогично методу add, изменяя текущий вектор. Для получения нового объекта без изменения исходных векторов можно воспользоваться его перегрузкой.

Нормализация вектора

Нормализация вектора представляет собой операцию приведения вектора к единичной длине (модулю), сохраняя его направление. Это полезно, например, при работе с направлениями в 3D-пространстве, где важно, чтобы вектор был нормирован. Метод normalize изменяет исходный вектор.

var vec = new pc.Vec3(3, 4, 0);
vec.normalize();
console.log(vec);  // Vec3 { x: 0.6, y: 0.8, z: 0 }

Метод возвращает тот же объект, но его длина становится равной 1. Для вычисления длины вектора можно использовать метод length, который возвращает его текущий модуль.

var length = vec.length();
console.log(length);  // 1

Если длина вектора равна нулю, нормализация вызовет ошибку, поскольку невозможно нормализовать нулевой вектор. В таких случаях рекомендуется проверять длину вектора перед нормализацией.

Скалярное произведение

Скалярное произведение (или внутреннее произведение) двух векторов — это операция, которая возвращает одно число, являющееся результатом умножения соответствующих компонент векторов и их последующего суммирования. Скалярное произведение векторов A и B вычисляется по формуле:

[ A B = A_x B_x + A_y B_y + A_z B_z]

В PlayCanvas для этого используется метод dot:

var vecA = new pc.Vec3(1, 2, 3);
var vecB = new pc.Vec3(4, 5, 6);
var result = vecA.dot(vecB);
console.log(result);  // 32

Скалярное произведение широко используется при вычислениях углов между векторами. Если скалярное произведение равно нулю, то векторы перпендикулярны. Если оно положительное, угол между векторами острый, а если отрицательное — тупой.

Векторное произведение

Векторное произведение двух векторов — это операция, которая возвращает новый вектор, перпендикулярный обоим исходным векторам. Для векторов A и B результат векторного произведения C вычисляется как:

[ C = A B = (A_y B_z - A_z B_y, A_z B_x - A_x B_z, A_x B_y - A_y B_x)]

В PlayCanvas для вычисления векторного произведения используется метод cross:

var vecA = new pc.Vec3(1, 0, 0);
var vecB = new pc.Vec3(0, 1, 0);
var result = vecA.cross(vecB);
console.log(result);  // Vec3 { x: 0, y: 0, z: 1 }

Метод cross возвращает новый вектор, который является результатом векторного произведения двух исходных векторов. Векторное произведение полезно, например, при вычислении нормали к плоскости, определенной двумя векторами.

Дополнительные операции с векторами

Помимо основных операций, класс pc.Vec3 включает в себя множество вспомогательных методов, которые позволяют выполнять различные математические действия с векторами.

  • Модуль вектора: Метод length() возвращает длину (модуль) вектора, а метод lengthSquared() — квадрат его длины. Второй метод полезен, когда необходимо сравнивать длины векторов без вычисления квадратных корней.
var vec = new pc.Vec3(3, 4, 0);
console.log(vec.length());  // 5
console.log(vec.lengthSquared());  // 25
  • Вектор на скаляр: Для умножения или деления вектора на скалярный множитель используется методы scale и div:
var vec = new pc.Vec3(1, 2, 3);
vec.scale(2);
console.log(vec);  // Vec3 { x: 2, y: 4, z: 6 }
vec.div(2);
console.log(vec);  // Vec3 { x: 1, y: 2, z: 3 }

Заключение

В библиотеке PlayCanvas класс pc.Vec3 предоставляет мощный набор инструментов для работы с трехмерными векторами. Операции сложения, вычитания, нормализации, скалярного и векторного произведения являются основными векторными операциями, необходимыми для работы с 3D-данными. Использование этих методов позволяет эффективно решать задачи, связанные с позиционированием, направлением и движением объектов в 3D-пространстве.