Two.js предоставляет мощный и гибкий API для работы с векторной графикой, позволяя создавать как простые, так и сложные геометрические формы. Среди базовых примитивов особое место занимают окружности и эллипсы, которые часто используются для визуализации, анимаций и интерактивных элементов.
Для создания окружности используется метод
makeCircle(x, y, radius), где x и
y — координаты центра, а radius — радиус
окружности.
const two = new Two({ width: 800, height: 600 }).appendTo(document.body);
const circle = two.makeCircle(400, 300, 100);
circle.fill = '#1abc9c';
circle.stroke = '#16a085';
circle.linewidth = 5;
two.update();
fill — цвет заливки.stroke — цвет контура.linewidth — толщина линии
контура.Окружность создается как векторный объект, что позволяет применять к ней трансформации и анимации.
Для эллипса используется метод
makeEllipse(x, y, width, height), где width и
height — размеры по горизонтали и вертикали
соответственно.
const ellipse = two.makeEllipse(400, 300, 200, 100);
ellipse.fill = '#e74c3c';
ellipse.stroke = '#c0392b';
ellipse.linewidth = 4;
two.update();
Эллипс можно воспринимать как растянутую окружность. Он поддерживает те же свойства заливки, контура и толщины линии.
Two.js позволяет гибко управлять свойствами объектов:
circle.opacity = 0.5;circle.cap = 'round';ellipse.scale = 1.5;ellipse.rotation = Math.PI / 4; (угол в радианах)Все эти свойства можно изменять динамически в анимационных циклах для создания визуально интересных эффектов.
Two.js использует встроенный цикл обновления через метод
bind('upd ate', callback). Пример анимации увеличения и
уменьшения радиуса окружности:
two.bind('update', function(frameCount) {
circle.radius = 50 + 50 * Math.sin(frameCount * 0.05);
}).play();
Для эллипса можно анимировать искажение по осям:
two.bind('update', function(frameCount) {
ellipse.width = 200 + 50 * Math.sin(frameCount * 0.03);
ellipse.height = 100 + 30 * Math.cos(frameCount * 0.03);
}).play();
Окружности и эллипсы легко объединять в группы
(Two.Group), что упрощает совместные трансформации:
const group = two.makeGroup(circle, ellipse);
group.translation.se t(200, 100);
group.rotation = Math.PI / 6;
Группы позволяют одновременно перемещать, масштабировать и вращать несколько объектов, сохраняя относительное положение элементов внутри группы.
Two.js поддерживает базовое взаимодействие через DOM-элементы и сторонние библиотеки для событий мыши. Например, изменение цвета при наведении:
document.querySelector('canvas').addEventListener('mousemove', (e) => {
const rect = e.target.getBoundingClientRect();
const mouseX = e.clientX - rect.left;
const mouseY = e.clientY - rect.top;
if (Math.hypot(mouseX - circle.translation.x, mouseY - circle.translation.y) < circle.radius) {
circle.fill = '#f1c40f';
} else {
circle.fill = '#1abc9c';
}
});
Комбинируя окружности и эллипсы, можно создавать более сложные фигуры, например:
Каждый объект остаётся векторным и поддерживает все трансформации и анимации, что делает Two.js особенно удобным для интерактивной визуализации.
Two.js позволяет применять градиенты к окружностям и
эллипсам с помощью LinearGradient и
RadialGradient:
const gradient = two.makeRadialGradient(
0, 0, 0, 0, 0, 100,
new Two.Stop(0, '#3498db'),
new Two.Stop(1, '#2980b9')
);
circle.fill = gradient;
Градиенты добавляют глубину и визуальную выразительность, особенно в анимационных сценах.
makeCircle и
makeEllipse.bind('update').Окружности и эллипсы в Two.js — это не только базовые примитивы, но и мощные строительные блоки для создания интерактивной графики, анимаций и визуализаций данных.