В библиотеке Two.js объекты Two.Vector представляют
собой основу для работы с векторами в двухмерном пространстве.
Конструктор создаёт вектор с координатами x и
y:
let v = new Two.Vector(50, 100);
Если параметры не переданы, значения по умолчанию равны 0. Векторы могут использоваться как для описания точек, так и для хранения направлений и скорости движения объектов.
x — значение по оси X.y — значение по оси Y.length — вычисляет длину вектора, автоматически
пересчитывается при изменении координат через метод
set.angle — угол в радианах относительно оси X, может быть
вычислен или установлен вручную через методы библиотеки.v.length; // длина вектора
v.angle; // угол относительно оси X
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)
Сложение и вычитание
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)
Метод normalize() преобразует вектор в единичный (длина
равна 1), сохраняя направление:
let v = new Two.Vector(3, 4);
v.normalize(); // v = (0.6, 0.8), длина = 1
Нормализация полезна для задания направления движения или вычисления направления силы.
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
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
Метод 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
Скалярное произведение используется для вычисления углов между векторами и проекций.
Анимация движения объектов
Векторы позволяют хранить позиции, скорости и ускорения объектов. Например, для движения круга:
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, позволяя работать с движением, направлением, столкновениями и геометрическими преобразованиями в двухмерном пространстве.