Класс 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-пространстве.