Масштабирование — базовая операция при работе с графикой, позволяющая изменять размеры объектов без пересчёта их геометрии. В библиотеке Two.js масштаб применяется через трансформации, что делает процесс гибким и эффективным.
В Two.js любой графический объект (shape) обладает свойством
scale, которое определяет коэффициент увеличения или
уменьшения относительно исходного размера.
Ключевые особенности:
Простейший пример:
const two = new Two({ width: 500, height: 500 }).appendTo(document.body);
const rect = two.makeRectangle(250, 250, 100, 100);
rect.fill = 'blue';
// Увеличение в 2 раза
rect.scale = 2;
two.update();
Свойство scale может быть:
Two.Vector (раздельный масштаб)Пример неравномерного масштабирования:
rect.scale = new Two.Vector(2, 0.5);
Результат:
Это используется для:
В Two.js изображения добавляются через makeImage или
Two.Sprite.
const image = two.makeImage('image.png', 250, 250);
image.scale = 1.5;
two.update();
Важно:
По умолчанию масштабирование происходит относительно центра объекта.
Центр определяется свойством:
shape.translation
Для изменения точки масштабирования используется смещение (offset):
image.translation.set(100, 100);
Однако более точное управление достигается через группировку:
const group = two.makeGroup(image);
// смещение центра группы
group.translation.set(200, 200);
group.scale = 2;
Группы позволяют:
Масштаб удобно использовать для создания анимаций:
two.bind('update', function(frameCount) {
rect.scale = 1 + Math.sin(frameCount * 0.05) * 0.5;
});
Эффект:
При увеличении растровых изображений:
При масштабировании:
stroke) также масштабируютсяРешение — вручную компенсировать:
rect.linewidth = 2 / rect.scale;
Если объект находится внутри группы:
group.scale = 2;
rect.scale = 0.5;
Итоговый масштаб:
2 * 0.5 = 1
Это важно учитывать при сложных сценах.
Two.js использует матрицы преобразований “под капотом”.
Каждый объект имеет:
translation)rotation)scale)Все они объединяются в одну матрицу.
Порядок применения:
Это означает:
const scaleFactor = window.innerWidth / 500;
image.scale = scaleFactor;
Позволяет подгонять графику под экран.
element.addEventListener('mouseenter', () => {
rect.scale = 1.2;
});
element.addEventListener('mouseleave', () => {
rect.scale = 1;
});
let zoom = 1;
window.addEventListener('wheel', (e) => {
zoom += e.deltaY * -0.001;
zoom = Math.max(0.5, Math.min(3, zoom));
group.scale = zoom;
});
При частом изменении масштаба:
two.update()two.play() для анимации| Подход | Описание |
|---|---|
scale |
Быстрое изменение размера через трансформацию |
| изменение геометрии | Пересчёт точек объекта |
Преимущества scale:
Недостатки:
scaleTwo.Vectortwo.bind('update', ...)Масштабирование в Two.js является фундаментальным инструментом трансформации, позволяющим управлять визуальным представлением объектов без изменения их структуры, что делает его ключевым элементом при разработке интерактивной графики и анимаций.