Paper.js предоставляет мощные средства для работы с векторной графикой на HTML5 Canvas, включая трансформации объектов, такие как смещение, поворот, масштабирование и наклон (skew). Наклон позволяет искажать объект по осям X и Y, создавая эффект перспективного сдвига без изменения его размеров.
Для работы с наклоном используются матрицы
трансформации и свойства объектов Matrix и
Matrix.skew(). Каждый объект в Paper.js, будь то
Path, Group или Raster, имеет
свойство matrix, которое хранит текущее состояние
трансформации:
let path = new Path.Rectangle({
point: [50, 50],
size: [100, 50],
fillColor: 'blue'
});
// Создание матрицы для наклона
let skewMatrix = new Matrix();
skewMatrix.skew(20, 0); // Наклон по оси X на 20 градусов
path.transform(skewMatrix);
Matrix.skew(x, y) принимает два аргумента:
x — угол наклона по горизонтали, y —
угол наклона по вертикали.Важно помнить, что наклон — это линейная трансформация, которая не изменяет размеры объекта, но искажает его форму.
Объекты, объединённые в Group, можно наклонять единым
действием:
let group = new Group();
group.addChild(new Path.Circle({center: [100, 100], radius: 30, fillColor: 'red'}));
group.addChild(new Path.Rectangle({point: [150, 100], size: [60, 40], fillColor: 'green'}));
group.matrix.skew(15, 10); // Наклон группы по X и Y
Наклон часто используется вместе с поворотом и масштабированием. Порядок применения трансформаций важен, так как матрицы умножаются:
let matrix = new Matrix();
matrix.translate(200, 100); // Перемещение
matrix.skew(30, 0); // Наклон по X
matrix.rotate(45); // Поворот на 45 градусов
path.transform(matrix);
translate, skew,
rotate даст совершенно разные результаты.bounds и segmentsХотя Matrix.skew() — основной инструмент, можно
создавать наклон вручную, изменяя координаты сегментов:
let rect = new Path.Rectangle([50, 50], [100, 50]);
rect.segments.forEach(segment => {
segment.point.x += segment.point.y * Math.tan(20 * Math.PI / 180);
});
Paper.js позволяет плавно анимировать наклон с использованием событий
onFrame:
let skewAngle = 0;
path.onFr ame = event => {
skewAngle += 1; // увеличиваем угол наклона на 1 градус
let matrix = new Matrix();
matrix.skew(skewAngle, 0);
path.transform(matrix);
};
pivot: можно создавать
свои матрицы с учётом точки опоры для наклона.Skew в Paper.js реализуется через матрицы трансформаций и позволяет управлять углами наклона объектов и групп, комбинируя его с поворотом, масштабированием и перемещением. Прямое управление сегментами позволяет создавать более точные или анимированные эффекты. Понимание порядка применения трансформаций и центра наклона критично для правильного визуального результата.