Paper.js предоставляет мощный инструментарий для работы с векторной графикой, в том числе с объектами Point, которые позволяют выполнять геометрические вычисления напрямую. Основные методы для работы с расстоянием, углом и нормализацией базируются на векторной арифметике и крайне удобны для анимации и построения сложных графических взаимодействий.
Для вычисления расстояния между двумя точками используется метод
Point#getDistance():
var pointA = new Point(50, 100);
var pointB = new Point(200, 300);
var distance = pointA.getDistance(pointB);
console.log(distance); // возвращает число в пикселях
Особенности использования:
[ d = ]
Point#getLength() для векторов, а затем
сравнивать квадраты длин, чтобы избежать вычисления корня.Paper.js позволяет легко определять угол в радианах или градусах
между двумя точками с помощью метода
Point#getAngle() или
Point#getAngleInDegrees():
var vector = pointB - pointA;
var angle = vector.angle; // в градусах
Point#angleInRadians:var radians = vector.angle * Math.PI / 180;
Нормализация — процесс приведения вектора к единичной
длине при сохранении направления. В Paper.js это выполняется
методом Point#normalize():
var vector = new Point(3, 4);
vector = vector.normalize();
console.log(vector.length); // 1
Ключевые моменты:
Point#multiply(scalar):var scaledVector = vector.multiply(100); // длина 100 пикселей
Соединяя вычисление расстояния, угла и нормализацию, можно создать гибкое управление движением объектов:
var start = new Point(50, 50);
var target = new Point(300, 200);
var direction = target - start;
direction = direction.normalize();
var speed = 5; // пикселей за кадр
var position = start;
function onFrame(event) {
if (position.getDistance(target) > speed) {
position = position + direction.multiply(speed);
circle.position = position;
}
}
Алгоритм:
Для вращения объектов в Paper.js углы и нормализация векторов играют важную роль:
var vector = target - start;
var angle = vector.angle;
var path = new Path.Circle(start, 20);
path.rotate(angle);
Path#rotate(angle) вращает объект
вокруг его центра на заданное количество градусов.getLength() и getLengthSquared(), чтобы
избежать лишних вычислений корня.angle и normalize, чтобы
создавать динамическое управление объектами в любой
точке сцены.Методы getDistance(),
angle и
normalize() образуют базовую триаду для
работы с векторной графикой в Paper.js. Они позволяют:
Совмещение этих инструментов открывает возможности для создания сложных анимаций, интерактивных элементов и визуальных эффектов в канвасах.