Класс pc.Vec2: операции, применение

Класс pc.Vec2 представляет собой двухмерный вектор в библиотеке PlayCanvas, часто используемый для работы с координатами, направлениями и другими геометрическими вычислениями в 2D-пространстве. Вектор pc.Vec2 описывается двумя компонентами: x и y, которые могут быть использованы для различных математических операций, таких как сложение, вычитание, скалярное произведение и другие.

Конструктор класса pc.Vec2

Конструктор класса pc.Vec2 используется для создания нового экземпляра вектора. Он принимает два аргумента, соответствующих значениям координат x и y. Если аргументы не переданы, они принимают значения по умолчанию (оба равны 0).

let v1 = new pc.Vec2(3, 4);  // Вектор с координатами (3, 4)
let v2 = new pc.Vec2();      // Вектор с координатами (0, 0)

Свойства

Класс pc.Vec2 имеет два основных свойства:

  • x — компонент вектора по оси X.
  • y — компонент вектора по оси Y.
let v = new pc.Vec2(5, 7);
console.log(v.x);  // 5
console.log(v.y);  // 7

Методы

set(x, y)

Метод set позволяет установить новые значения для компонентов вектора. Он принимает два параметра: x и y, которые являются новыми значениями для соответствующих координат.

let v = new pc.Vec2();
v.set(3, 5);
console.log(v.x);  // 3
console.log(v.y);  // 5

clone()

Метод clone создает новый вектор, который является копией текущего вектора.

let v1 = new pc.Vec2(1, 2);
let v2 = v1.clone();
console.log(v2.x, v2.y);  // 1 2

add(vec)

Метод add выполняет сложение текущего вектора с переданным вектором. Он изменяет текущий вектор и возвращает его же.

let v1 = new pc.Vec2(1, 2);
let v2 = new pc.Vec2(3, 4);
v1.add(v2);
console.log(v1.x, v1.y);  // 4 6

subtract(vec)

Метод subtract выполняет вычитание из текущего вектора переданного вектора. Как и метод add, он изменяет текущий вектор.

let v1 = new pc.Vec2(5, 6);
let v2 = new pc.Vec2(2, 1);
v1.subtract(v2);
console.log(v1.x, v1.y);  // 3 5

multiply(scalar)

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

let v = new pc.Vec2(2, 3);
v.multiply(2);
console.log(v.x, v.y);  // 4 6

divide(scalar)

Метод divide делит вектор на скаляр. Результатом будет новый вектор с компонентами, деленными на этот скаляр.

let v = new pc.Vec2(4, 8);
v.divide(2);
console.log(v.x, v.y);  // 2 4

length()

Метод length возвращает длину (модуль) вектора. Это вычисляется по формуле Пифагора, где length = sqrt(x^2 + y^2).

let v = new pc.Vec2(3, 4);
console.log(v.length());  // 5

normalize()

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

let v = new pc.Vec2(3, 4);
v.normalize();
console.log(v.length());  // 1

dot(vec)

Метод dot вычисляет скалярное произведение двух векторов. Скалярное произведение двух векторов A(x1, y1) и B(x2, y2) вычисляется как A · B = x1 * x2 + y1 * y2.

let v1 = new pc.Vec2(1, 2);
let v2 = new pc.Vec2(3, 4);
console.log(v1.dot(v2));  // 11

cross(vec)

Метод cross вычисляет псевдоскалярное произведение двух двумерных векторов. Для 2D-векторов это эквивалентно вычислению компоненты вектора, перпендикулярного обоим векторами.

let v1 = new pc.Vec2(1, 2);
let v2 = new pc.Vec2(3, 4);
console.log(v1.cross(v2));  // -2

Операции с векторами

Векторные операции, такие как сложение, вычитание, умножение и деление на скаляр, являются основными средствами для работы с объектами pc.Vec2. Они позволяют легко изменять и манипулировать данными о позициях, направлениях и величинах в 2D-пространстве.

Сложение и вычитание векторов

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

let v1 = new pc.Vec2(1, 2);
let v2 = new pc.Vec2(3, 4);
let result = v1.add(v2);
console.log(result.x, result.y);  // 4 6

Масштабирование вектора

Масштабирование с помощью умножения на скаляр позволяет изменить размер вектора, при этом его направление остается неизменным. Это часто используется при изменении скорости движения объектов, например, при умножении на коэффициент времени в анимациях.

let v = new pc.Vec2(1, 1);
v.multiply(2);
console.log(v.x, v.y);  // 2 2

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

Нормализация часто используется для получения единичного вектора, что полезно при работе с направлениями. Например, нормализованный вектор может быть использован для задания скорости движения, при этом его длина всегда будет оставаться фиксированной, например, равной 1.

let v = new pc.Vec2(3, 4);
v.normalize();
console.log(v.x, v.y);  // 0.6 0.8

Применение в реальных задачах

  • Перемещения объектов: Вектор pc.Vec2 широко используется для представления позиций и перемещений объектов в двумерных пространствах. Например, при расчете движения объекта, можно использовать векторы для определения направления и скорости.

  • Коллизии и столкновения: Для вычисления столкновений между объектами в 2D-пространстве часто используют операции с векторами. Например, проверка на пересечение может быть выполнена с использованием векторного расстояния и нормализации векторов.

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

Заключение

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