В Two.js трансформации применяются к объектам через свойства
translation, rotation и scale.
Эти свойства позволяют перемещать, вращать и масштабировать фигуры на
сцене. Понимание порядка применения трансформаций критично, так как
результат может значительно отличаться при изменении последовательности
операций.
translationtranslation задаёт смещение объекта относительно его
исходного положения. Оно представлено объектом с координатами
x и y:
let rect = two.makeRectangle(0, 0, 100, 50);
rect.translation.set(50, 30);
В данном примере прямоугольник смещается на 50 пикселей по оси X и на 30 по оси Y. Смещение применяется перед вращением и масштабированием, если порядок операций стандартный.
rotationrotation задаётся в радианах и определяет вращение
объекта вокруг его центра (точки origin):
rect.rotation = Math.PI / 4; // Вращение на 45 градусов
Важный момент: вращение происходит относительно текущего
положения объекта, учитывая все предыдущие трансформации. Если
сначала изменить translation, а затем
rotation, объект повернётся уже в смещённой позиции.
scaleМасштабирование производится с помощью свойства scale,
которое также представлено объектом с x и
y:
rect.scale.set(2, 1.5);
Объект увеличивается в 2 раза по оси X и на 1.5 по оси Y.
Масштабирование выполняется относительно точки origin
объекта, поэтому порядок применения с translation и
rotation изменяет конечный результат.
В Two.js внутренне трансформации реализованы через матрицы аффинных
преобразований. Каждое свойство (translation,
rotation, scale) формирует собственную
матрицу, а итоговая матрица объекта вычисляется как произведение этих
матриц:
Итоговая матрица = Translation × Rotation × Scale
let circle = two.makeCircle(0, 0, 40);
// Сначала вращение, потом смещение
circle.rotation = Math.PI / 4;
circle.translation.set(100, 0);
// Или сначала смещение, потом вращение
circle.translation.set(100, 0);
circle.rotation = Math.PI / 4;
В первом случае круг вращается вокруг исходного центра, затем смещается. Во втором — вращение выполняется уже после смещения, что приводит к криволинейному движению по дуге.
Two.js поддерживает группировку объектов, что позволяет применять трансформации к целой группе сразу. Все дочерние объекты наследуют трансформации родителя.
let group = two.makeGroup(rect, circle);
group.translation.set(200, 150);
group.rotation = Math.PI / 6;
Все трансформации в Two.js выполняются относительно точки
origin объекта. По умолчанию origin находится
в центре фигуры. Изменение точки привязки позволяет получить
нестандартное вращение или масштабирование:
rect.origin.set(0, 0); // Точка привязки в левом верхнем углу
rect.rotation = Math.PI / 4;
Теперь вращение происходит относительно левого верхнего угла, а не центра.
addДля создания сложных эффектов удобно использовать цепочку объектов с вложенными трансформациями:
let innerCircle = two.makeCircle(0, 0, 20);
let outerGroup = two.makeGroup(innerCircle);
outerGroup.translation.set(150, 150);
outerGroup.rotation = Math.PI / 3;
Two.js позволяет динамически изменять трансформации в цикле анимации:
two.bind('update', function(frameCount) {
rect.rotation += 0.01;
rect.translation.x = 100 + Math.sin(frameCount * 0.05) * 50;
});
two.play();
rotation и translation в каждом
кадре создаёт плавную анимацию.Эффективное использование трансформаций в Two.js требует понимания
порядка их применения, правильной настройки
origin и работы с группами. Контролируемая композиция этих
элементов позволяет создавать сложные визуальные эффекты и динамические
сцены с точным управлением движением и ориентацией объектов.