Paper.js строится вокруг векторной графики, где каждая фигура, линия или кривая — это объект, обладающий набором свойств и методов. Центральными элементами являются Path, Segment, Point, Curve и Shape. Их понимание позволяет эффективно управлять сложными геометрическими конструкциями.
Path — последовательность сегментов, соединённых кривыми или прямыми линиями. Каждый сегмент задаётся точкой Point, а при необходимости — управляющими точками для кривых Безье.
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));
Segment — отдельный элемент Path. Состоит из:
point — координаты вершины.handleIn и handleOut — управляющие точки
для кривых Безье.var segment = new Segment(new Point(200, 200), new Point(-30, 0), new Point(30, 0));
Point — базовый объект для работы с координатами. Поддерживает операции сложения, вычитания, умножения, нормализации, вычисления расстояний и углов между точками.
var p1 = new Point(100, 100);
var p2 = new Point(200, 150);
var distance = p1.getDistance(p2);
Paper.js позволяет строить кривые Безье, задавая handleIn и handleOut для сегментов Path. Управляющие точки позволяют создавать плавные переходы и сложные формы.
var curve = new Path();
curve.strokeColor = 'blue';
curve.add(new Segment(new Point(50, 200), null, new Point(50, -50)));
curve.add(new Segment(new Point(150, 200), new Point(-50, 50), null));
path.closed = true и позволяют работать с заливкой,
вычислением площади, пересечениями.var polygon = new Path.RegularPolygon(new Point(200, 200), 5, 100);
polygon.fillColor = 'green';
polygon.closed = true;
Paper.js поддерживает булевы операции между Path-объектами через
методы: unite(), intersect(),
subtract(), exclude().
var circle = new Path.Circle(new Point(300, 300), 50);
var rectangle = new Path.Rectangle(new Point(280, 280), new Size(100, 50));
var union = circle.unite(rectangle);
union.fillColor = 'red';
path.splitAt(offset) — разрезает путь в указанной
позиции.path.flatten() — преобразует кривые в сегменты с
прямыми линиями, упрощая сложные кривые.path.simplify() — уменьшает количество сегментов,
сохраняя форму.var path = new Path();
path.add(new Point(50, 50));
path.add(new Point(100, 100));
path.add(new Point(150, 50));
path.simplify();
Paper.js использует систему координат Canvas, где
точка (0,0) находится в левом верхнем углу. Для работы с
фигурами применяются методы трансформации:
translate(point) — смещение.rotate(angle, center) — вращение относительно
центра.scale(factor, center) — масштабирование.shear(matrix) — наклон.var rect = new Path.Rectangle(new Point(50, 50), new Size(100, 50));
rect.rotate(45, rect.bounds.center);
rect.scale(1.5, rect.bounds.center);
Path.curves позволяет получить массив кривых внутри
пути и работать с каждой кривой отдельно. Можно анимировать кривые,
изменяя их segment.point или handleIn/Out, что
особенно полезно для сложных анимационных сцен.
var path = new Path();
path.strokeColor = 'black';
path.add(new Point(50, 300));
path.add(new Point(150, 350), new Point(50, 50), new Point(-50, -50));
for (var i = 0; i < path.curves.length; i++) {
path.curves[i].segments[0].point.y += 10;
}
path.length — длина пути.path.getPointAt(offset) — точка на пути на указанном
расстоянии.path.getTangentAt(offset) — касательная к пути.path.getNormalAt(offset) — нормаль к пути.Эти методы позволяют создавать анимации по траекториям, вычислять позиции объектов вдоль кривых, строить параллельные линии и offset paths.
var path = new Path.Circle(new Point(400, 400), 100);
var point = path.getPointAt(50);
var tangent = path.getTangentAt(50);
var normal = path.getNormalAt(50);
Для анализа сложных фигур используются методы:
path.contains(point) — проверяет, находится ли точка
внутри фигуры.path.intersects(path) — проверяет пересечение двух
объектов.path.getIntersections(path) — возвращает массив точек
пересечения.var circle = new Path.Circle(new Point(200, 200), 50);
var rect = new Path.Rectangle(new Point(180, 180), new Size(100, 50));
var intersections = circle.getIntersections(rect);
intersections.forEach(function(intersection) {
new Path.Circle(intersection.point, 5).fillColor = 'black';
});
Paper.js предоставляет удобные конструкторы для создания правильных многоугольников, звезд и прямоугольников с радиусом закругления:
var star = new Path.Star(new Point(300, 300), 5, 30, 70);
star.fillColor = 'yellow';
Каждая фигура может быть изменена динамически, применяя методы трансформации и редактирования сегментов.
Комбинация Path, Segment, Curve, булевых операций и методов трансформации позволяет создавать сложные геометрические конструкции, управлять кривыми Безье, анализировать пересечения и анимировать объекты в Paper.js. Эти инструменты составляют основу работы с векторной графикой и позволяют реализовать практически любые задачи, связанные с динамическими и статическими формами.