Математические операторы для Point/Size

В 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}

Особенности:

  • Складываются координаты по компонентам: x с x, y с y.
  • Для вычитания работает та же логика.
  • Методы 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);

Эти операции обеспечивают гибкое управление положением, размером и ориентацией объектов без необходимости вручную вычислять координаты.


Важные методы для Point/Size

Метод Описание
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 превращают работу с координатами и размерами в удобный и мощный инструмент, позволяя строить анимации, трансформации и сложные композиции без громоздких ручных вычислений.