В Paper.js объекты Point и Size являются базовыми для работы с координатами и размерами. Они поддерживают полный набор математических операторов, позволяющих выполнять сложные геометрические вычисления напрямую. Эти операторы включают сложение, вычитание, умножение, деление, а также методы для получения скалярных и векторных свойств.
Объекты Point и Size можно складывать и вычитать между собой. Это позволяет легко изменять позиции объектов, смещать точки и работать с размерами:
let p1 = new Point(50, 100);
let p2 = new Point(20, 30);
let sum = p1.add(p2); // Point {x: 70, y: 130}
let diff = p1.subtract(p2); // Point {x: 30, y: 70}
Особенности:
add и subtract возвращают новый
объект, исходные остаются неизменными.Умножение и деление может выполняться как на другой Point/Size, так и на скалярное число:
let size = new Size(100, 50);
let scale = 2;
let multiplied = size.multiply(scale); // Size {width: 200, height: 100}
let divided = size.divide(2); // Size {width: 50, height: 25}
Для операций между объектами:
let p1 = new Point(10, 20);
let p2 = new Point(2, 5);
let result = p1.multiply(p2); // Point {x: 20, y: 100}
Важно:
Paper.js позволяет создавать цепочки операций для сложных преобразований:
let p = new Point(10, 15);
let result = p.add(new Point(5, 5)).multiply(3).subtract(new Point(2, 2));
// Результат: Point {x: 39, y: 54}
Каждое действие возвращает новый объект, что позволяет цеплять операции без изменения исходного объекта.
Для проверки равенства объектов используются методы
equals и isZero:
let p1 = new Point(10, 20);
let p2 = new Point(10, 20);
p1.equals(p2); // true
p1.isZero(); // false
Эти методы сравнивают координаты покомпонентно.
Объекты Point и Size имеют удобные методы для работы с их величинами:
length — длина вектора (для Point):let p = new Point(3, 4);
p.length; // 5
angle — угол в градусах относительно оси X:let p = new Point(0, 1);
p.angle; // 90
normalize() — возвращает вектор с длиной 1:let p = new Point(10, 0);
p.normalize(); // Point {x: 1, y: 0}
rotate(angle) — поворот вектора на заданный угол:let p = new Point(1, 0);
p.rotate(90); // Point {x: 0, y: 1}
Комбинация математических операторов позволяет:
circle.position = circle.position.add(new Point(1, 0));
rectangle.size = rectangle.size.multiply(1.1);
let center = new Point(50, 50);
let point = new Point(60, 50);
let rotatedPoint = point.subtract(center).rotate(45).add(center);
Эти операции обеспечивают гибкое управление положением, размером и ориентацией объектов без необходимости вручную вычислять координаты.
| Метод | Описание |
|---|---|
add(point/size) |
Складывает текущий объект с другим |
subtract(point/size) |
Вычитает объект |
multiply(point/size/number) |
Умножение на объект или скаляр |
divide(point/size/number) |
Деление на объект или скаляр |
equals(point/size) |
Проверка равенства |
isZero() |
Проверка, является ли объект нулевым |
normalize() |
Нормализация вектора до длины 1 |
rotate(angle) |
Поворот вектора на угол в градусах |
length |
Длина вектора |
angle |
Угол в градусах относительно X |
let p = new Point(10, 20);
let s = new Size(2, 3);
let newPoint = p.add(s).multiply(5).subtract(new Point(3, 3));
// Point {x: 57, y: 98}
let scaledSize = s.multiply(new Point(4, 5));
// Size {width: 8, height: 15}
Такие сочетания дают возможность создавать сложные геометрические эффекты с минимальными вычислениями.
Математические операторы в Paper.js для Point и Size превращают работу с координатами и размерами в удобный и мощный инструмент, позволяя строить анимации, трансформации и сложные композиции без громоздких ручных вычислений.