В Two.js объект Two.Vector используется
для работы с двухмерными векторами. Каждый вектор имеет координаты
x и y, которые могут быть заданы при создании
или изменены позже.
let v1 = new Two.Vector(10, 20);
let v2 = new Two.Vector(5, 15);
Базовые операции включают сложение, вычитание, масштабирование, нормализацию и вычисление длины вектора.
let result = v1.clone().add(v2);
// result.x = 15, result.y = 35
let difference = v1.clone().sub(v2);
// difference.x = 5, difference.y = 5
v1.multiplyScalar(2);
// v1.x = 20, v1.y = 40
let length = v1.length(); // Вычисляет длину: sqrt(x^2 + y^2)
v1.normalize(); // Преобразует вектор к единичной длине
let copy = v1.clone();
let target = new Two.Vector();
target.copy(v1);
let dot = v1.dot(v2);
// dot = v1.x * v2.x + v1.y * v2.y
Скалярное произведение позволяет определять угол между векторами:
let angle = Math.acos(v1.dot(v2) / (v1.length() * v2.length()));
let cross = v1.cross(v2);
// cross = v1.x * v2.y - v1.y * v2.x
Вектора в Two.js можно сдвигать, поворотать и масштабировать относительно точки:
v1.addSelf(new Two.Vector(5, -5));
// v1.x += 5, v1.y -= 5
v1.rotate(Math.PI / 4); // Поворот на 45 градусов
let origin = new Two.Vector(0, 0);
v1.multiplyScalar(2, origin); // Масштабирование относительно точки (0,0)
Векторы тесно связаны с позиционированием фигур и их движением:
let two = new Two({ width: 400, height: 400 }).appendTo(document.body);
let circle = two.makeCircle(100, 100, 50);
let velocity = new Two.Vector(2, 3);
function animate() {
circle.translation.addSelf(velocity);
two.update();
requestAnimationFrame(animate);
}
animate();
Здесь circle.translation — это объект
Two.Vector, который задает позицию фигуры на холсте.
Сложение векторов обеспечивает плавное перемещение
фигуры.
let distance = v1.distanceTo(v2);
// sqrt((v1.x - v2.x)^2 + (v1.y - v2.y)^2)
let v = v1.clone().lerp(v2, 0.5);
// v — точка посередине между v1 и v2
v1.clampScalar(0, 10);
// Ограничивает длину вектора между 0 и 10
Эти инструменты позволяют выполнять комплексные анимации, физические симуляции и управлять движением объектов в Two.js, сохраняя при этом простоту кода и гибкость операций с координатами.
Векторы можно создавать и преобразовывать из массивов и объектов:
let arr = [10, 20];
let vecFromArray = new Two.Vector().fromArray(arr);
let obj = { x: 5, y: 15 };
let vecFromObj = new Two.Vector().fromObject(obj);
Также можно преобразовать вектор обратно в массив или объект:
let array = v1.toArray(); // [x, y]
let object = v1.toObject(); // { x: x, y: y }
Эти методы позволяют легко интегрировать векторы в сложные структуры данных и обмениваться координатами между различными компонентами приложения.