Two.Vector и векторные операции

В библиотеке Two.js объекты Two.Vector представляют собой основу для работы с векторами в двухмерном пространстве. Конструктор создаёт вектор с координатами x и y:

let v = new Two.Vector(50, 100);
  • x — горизонтальная координата.
  • y — вертикальная координата.

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

Основные свойства

  • x — значение по оси X.
  • y — значение по оси Y.
  • length — вычисляет длину вектора, автоматически пересчитывается при изменении координат через метод set.
  • angle — угол в радианах относительно оси X, может быть вычислен или установлен вручную через методы библиотеки.
v.length; // длина вектора
v.angle;  // угол относительно оси X

Методы работы с векторами

1. Копирование и установка координат

  • copy(v) — копирует значения координат из другого вектора.
  • set(x, y) — задаёт новые значения координат.
let v1 = new Two.Vector(10, 20);
let v2 = new Two.Vector();
v2.copy(v1); // v2 = (10, 20)
v1.set(30, 40); // v1 = (30, 40)

2. Арифметические операции

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

  • add(v) — прибавляет вектор v.
  • sub(v) — вычитает вектор v.
let a = new Two.Vector(5, 5);
let b = new Two.Vector(2, 3);
a.add(b); // a = (7, 8)
a.sub(b); // a = (5, 5)

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

  • multiply(scalar) — умножение координат на число.
  • divide(scalar) — деление координат на число.
let v = new Two.Vector(4, 6);
v.multiply(2); // v = (8, 12)
v.divide(4);   // v = (2, 3)

3. Векторная нормализация

Метод normalize() преобразует вектор в единичный (длина равна 1), сохраняя направление:

let v = new Two.Vector(3, 4);
v.normalize(); // v = (0.6, 0.8), длина = 1

Нормализация полезна для задания направления движения или вычисления направления силы.

4. Вращение и угол

  • rotate(theta) — вращает вектор на угол theta в радианах.
  • angle — вычисляет текущий угол вектора.
let v = new Two.Vector(1, 0);
v.rotate(Math.PI / 2); // v ≈ (0, 1)
let angle = v.angle;   // angle ≈ π/2

5. Длина и дистанция

  • length() — возвращает длину вектора.
  • distanceTo(v) — вычисляет расстояние до другого вектора.
let v1 = new Two.Vector(0, 0);
let v2 = new Two.Vector(3, 4);
v1.length();         // 0
v2.length();         // 5
v1.distanceTo(v2);   // 5

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

Метод dot(v) позволяет вычислить скалярное произведение двух векторов:

let a = new Two.Vector(2, 3);
let b = new Two.Vector(4, -1);
let dotProduct = a.dot(b); // 2*4 + 3*(-1) = 5

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

Практическое использование в Two.js

Анимация движения объектов

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

let position = new Two.Vector(100, 100);
let velocity = new Two.Vector(2, 1);

function upd ate() {
  position.add(velocity);
  circle.translation.se t(position.x, position.y);
}

Определение направлений

Для поворота объекта в направлении движения можно использовать нормализованный вектор скорости:

let direction = velocity.clone().normalize();
circle.rotation = Math.atan2(direction.y, direction.x);

Взаимодействие объектов

Расстояние между объектами легко вычисляется с помощью метода distanceTo:

let d = position.distanceTo(otherObject.position);
if (d < 50) {
  // логика взаимодействия
}

Продвинутые операции с векторами

  • lerp(v, t) — линейная интерполяция между текущим вектором и v с параметром t (0..1).
  • clone() — создаёт копию вектора с текущими координатами.
  • isZero() — проверяет, является ли вектор нулевым (0, 0).
let a = new Two.Vector(0, 0);
let b = new Two.Vector(10, 10);
let mid = a.clone().lerp(b, 0.5); // mid = (5, 5)

Эти методы позволяют создавать сложные анимации и вычислительные алгоритмы, используя единый объект Two.Vector, без необходимости вручную обрабатывать координаты x и y.


Использование Two.Vector обеспечивает компактность кода, точность математических операций и легкость интеграции с графическими объектами Two.js, позволяя работать с движением, направлением, столкновениями и геометрическими преобразованиями в двухмерном пространстве.