В Paper.js Path является основным объектом для создания
и манипулирования векторными фигурами. Для формирования паттернов важно
понимать, как работать с координатами, сегментами и кривыми, а также
использовать группировку объектов и трансформации.
var path = new Path();
path.strokeColor = 'black';
path.add(new Point(50, 50));
path.add(new Point(150, 50));
path.add(new Point(150, 150));
path.add(new Point(50, 150));
path.closed = true;
Здесь создается квадрат с использованием массива сегментов. Ключевой
момент — установка closed = true, чтобы замкнуть путь и
позволить применять заливку.
Для создания паттернов используют комбинацию Path и
Group, после чего объект можно дублировать через метод
clone() или создавать матрицу повторов с помощью
циклов:
var group = new Group();
for (var x = 0; x < 500; x += 100) {
for (var y = 0; y < 500; y += 100) {
var square = path.clone();
square.position = new Point(x + 50, y + 50);
group.addChild(square);
}
}
Использование Group позволяет управлять всеми элементами
паттерна одновременно: менять цвет, поворачивать или масштабировать.
Паттерны становятся выразительнее при использовании кривых Безье. В Paper.js это делается через сегменты с управляющими точками:
var curve = new Path();
curve.strokeColor = 'blue';
curve.add(new Point(50, 200));
curve.add(new Point(150, 100), new Point(100, 50), new Point(200, 150));
curve.add(new Point(250, 200));
Каждый сегмент может содержать handleIn и
handleOut, что позволяет задавать направление и изгиб
линии, создавая плавные волнообразные паттерны.
Для динамических паттернов применяются трансформации
rotate, scale, translate:
for (var i = 0; i < 10; i++) {
var clone = curve.clone();
clone.rotate(i * 36, new Point(150, 150));
clone.scale(1 + i * 0.1, new Point(150, 150));
}
Такой подход позволяет создавать спиральные или радиальные паттерны, управляя положением, размером и углом каждого повторения.
Для создания визуально насыщенных паттернов важно использовать заливку и градиенты:
path.fillColor = {
gradient: {
stops: ['red', 'yellow'],
radial: true
},
origin: path.bounds.center,
destination: path.bounds.rightCenter
};
Градиенты можно комбинировать с прозрачностью и разными слоями
opacity, чтобы добиться сложной визуальной структуры
паттерна.
Сложные паттерны формируются из нескольких типов Path: линии, кривые,
многоугольники. Используется метод unite,
intersect и subtract для построения
композиционных фигур:
var circle = new Path.Circle(new Point(100, 100), 50);
var rectangle = new Path.Rectangle(new Point(50, 50), new Size(100, 100));
var combined = circle.unite(rectangle);
combined.fillColor = 'green';
Это позволяет создавать повторяющиеся элементы с уникальной формой, которые затем можно масштабировать и дублировать для паттернов.
Паттерны в Paper.js можно оживлять с помощью событий
onFrame:
group.onFr ame = function(event) {
group.rotation += 1;
group.children.forEach(function(item, index) {
item.position.x += Math.sin(event.count / 10 + index) * 0.5;
});
};
Использование анимации дает эффект движущегося или пульсирующего паттерна, сохраняя векторную четкость и гибкость.
Point и
bounds.Group и
циклы.unite,
intersect, subtract) позволяют комбинировать
простые формы в сложные паттерны.Эти приемы вместе позволяют создавать разнообразные паттерны от простых сеток до сложных динамических композиций, полностью используя возможности Paper.js.