В библиотеке Two.js объект Two.Shape
представляет собой базовый строительный блок для всех геометрических
фигур. Он позволяет создавать примитивные формы, такие как
прямоугольники, круги, линии и сложные многоугольники, с возможностью их
трансформации и анимации.
Основная структура создания фигуры выглядит следующим образом:
const shape = new Two.Shape(vertices, closed);
Two.Vector,
задающих форму фигуры.Пример создания простого треугольника:
const triangle = new Two.Shape([
new Two.Anchor(0, 0),
new Two.Anchor(50, 0),
new Two.Anchor(25, 50)
], true);
Каждая фигура строится на основе точек, представленных объектами
Two.Anchor или Two.Vector. Разница в
том, что Two.Anchor поддерживает дополнительные свойства
для кривых Безье:
Для создания простой линии достаточно использовать
Two.Vector:
const line = new Two.Shape([
new Two.Vector(10, 10),
new Two.Vector(100, 50)
]);
Пример добавления вершины:
triangle.add(new Two.Anchor(50, 50));
Удаление вершины:
triangle.remove(triangle.vertices[0]);
scaleX, scaleY.Пример смещения и вращения:
triangle.translation.set(100, 50);
triangle.rotation = Math.PI / 4;
triangle.scale = 2;
Флаг closed управляет, замыкается ли контур:
const openShape = new Two.Shape([
new Two.Vector(0, 0),
new Two.Vector(50, 50),
new Two.Vector(100, 0)
], false);
Для замкнутой формы линия между последней и первой точкой создается автоматически.
Two.js позволяет задавать визуальные свойства фигуры через следующие параметры:
Пример стилизации:
triangle.fill = '#FF0000';
triangle.stroke = '#000000';
triangle.linewidth = 3;
triangle.opacity = 0.8;
Можно комбинировать свойства, создавая сложные визуальные эффекты.
Круг в Two.js создается через Two.Circle (наследник
Two.Shape):
const circle = two.makeCircle(50, 50, 30);
circle.fill = '#00FF00';
circle.stroke = '#000000';
circle.linewidth = 2;
Прямоугольник создается через Two.Rectangle:
const rect = two.makeRectangle(100, 100, 80, 60);
rect.fill = '#0000FF';
rect.rotation = Math.PI / 6;
Линия — это частный случай фигуры с двумя вершинами:
const line = two.makeLine(0, 0, 200, 100);
line.stroke = '#FF00FF';
line.linewidth = 4;
Каждая вершина фигуры является объектом с координатами x
и y, которые можно изменять динамически для создания
анимации:
two.bind('update', function(frameCount) {
triangle.vertices[1].x = 50 + 20 * Math.sin(frameCount * 0.05);
});
two.play();
Таким образом, Two.Shape предоставляет полную гибкость
для построения и трансформации фигур, комбинируя простые методы работы с
вершинами и стилизацией. Это фундамент для создания сложных анимаций и
графических элементов в Two.js.