Paper.js предоставляет мощный набор инструментов для работы с
векторной графикой, включая возможность трансформации паттернов
(Pattern) внутри объектов. Паттерн в Paper.js представляет собой объект
Pattern, который можно использовать для заполнения
геометрических фигур повторяющейся текстурой. Управление трансформациями
паттерна позволяет изменять его масштаб, поворот, смещение и зеркальное
отображение без модификации исходного изображения.
Паттерн создаётся на основе любого объекта Paper.js или элемента HTML
<canvas>/<image>. Простейший
способ — создать Path или Raster и
использовать его для заполнения другого объекта:
var circle = new Path.Circle({
center: [50, 50],
radius: 25,
fillColor: 'red'
});
var pattern = new Pattern(circle, [0, 0, 50, 50]);
var rect = new Path.Rectangle({
point: [0, 0],
size: [200, 200],
fillColor: pattern
});
item) и размер области повторения
(rectangle).Трансформации паттерна задаются через объект Matrix,
который можно применять к свойству pattern.transform
объекта FillColor. Matrix позволяет управлять следующими
аспектами:
Смещение (Translation) Перемещение паттерна относительно объекта:
pattern.transform(new Matrix().translate(30, 50));
Параметры translate(x, y) задают смещение по осям X и
Y.
Масштабирование (Scaling) Изменение размера паттерна без изменения исходного объекта:
pattern.transform(new Matrix().scale(2, 2));
Масштабирование может быть неодинаковым по осям:
scale(sx, sy).
Поворот (Rotation) Вращение паттерна относительно начала координат:
pattern.transform(new Matrix().rotate(45));
Углы задаются в градусах, положительное значение — по часовой стрелке.
Отражение (Reflection / Skew) Можно инвертировать паттерн или создавать косые сдвиги:
pattern.transform(new Matrix().scale(-1, 1)); // зеркальное отражение по X
pattern.transform(new Matrix().shear(30, 0)); // наклон по оси XMatrix поддерживает цепочку операций. Это позволяет одновременно поворачивать, масштабировать и смещать паттерн в одной матрице:
var m = new Matrix();
m.translate(50, 50)
.rotate(30)
.scale(1.5, 1.5);
pattern.transform(m);
В этом примере паттерн сначала смещается, затем поворачивается и, наконец, увеличивается в масштабе. Порядок операций важен: поворот и масштабирование всегда применяются относительно текущих координат, поэтому перестановка операций может дать другой визуальный результат.
Чтобы паттерн следовал за объектом при перемещении или вращении,
нужно применять трансформацию к паттерну до назначения
fillColor, либо обновлять матрицу при каждом изменении
объекта:
var rect = new Path.Rectangle([0, 0], [200, 100]);
rect.fillColor = pattern;
// обновление паттерна при движении
rect.onFr ame = function(event) {
pattern.transform(new Matrix().rotate(1, rect.bounds.center));
};
Здесь паттерн плавно вращается вместе с анимацией объекта.
Трансформации паттернов позволяют создавать сложные визуальные эффекты, такие как:
Например, плавное смещение паттерна:
view.onFr ame = function(event) {
pattern.transform(new Matrix().translate(2, 0));
};
Это создаёт иллюзию движения текстуры слева направо.
Matrix можно комбинировать с
invert() для обратных эффектов.rotate(angle, point)
или scale(sx, sy, point)).Raster, чтобы не перегружать
GPU.Трансформации паттернов в Paper.js дают гибкость и позволяют создавать визуально сложные эффекты без изменения геометрии объекта. Комбинация матриц, динамических обновлений и анимации делает паттерны мощным инструментом для интерактивной графики.