Библиотека Three.js предоставляет мощные классы для работы с векторами различных размерностей: Vector2, Vector3 и Vector4. Эти классы являются фундаментальными при построении графики, манипуляции с координатами, расчетах направлений, нормалей и физических взаимодействий в 3D-пространстве. Каждый вектор содержит свойства для компонентов (x, y, z, w) и набор методов для арифметических и геометрических операций.
Vector2 представляет собой двумерный вектор с
компонентами x и y. Основные операции
включают:
let v = new THREE.Vector2(1, 2);
v.set(3, 4); // изменяет значения компонентов
Арифметические операции
add(v) – сложение с другим векторомsub(v) – вычитаниеmultiplyScalar(s) – умножение на скалярdivideScalar(s) – деление на скалярv.add(new THREE.Vector2(2, 3)); // результат: (5, 7)
v.multiplyScalar(0.5); // результат: (2.5, 3.5)
Нормализация и длина
length() – возвращает длину вектораnormalize() – приводит вектор к единичной длинеlengthSq() – квадрат длины, используется для
оптимизацииlet len = v.length();
v.normalize();
Векторные свойства
dot(v) – скалярное произведениеdistanceTo(v) – расстояние до другого вектораlerp(v, alpha) – линейная интерполяция между двумя
векторамиlet d = v.distanceTo(new THREE.Vector2(0, 0));
v.lerp(new THREE.Vector2(1, 1), 0.5); // смешивание 50%
Vector3 является трехмерным вектором с компонентами
x, y, z. Он используется для
позиционирования объектов, расчетов нормалей и направления движения.
let v = new THREE.Vector3(1, 2, 3);
v.set(4, 5, 6);
Арифметика векторов
add, sub, multiply,
divide – поэлементные операции с другим векторомaddScalar, multiplyScalar – операции со
скаляромv.add(new THREE.Vector3(1, 1, 1)); // (5, 6, 7)
v.multiplyScalar(2); // (10, 12, 14)
let len = v.length();
v.normalize(); // длина становится 1
Скалярное и векторное произведение
dot(v) – скалярное произведениеcross(v) – векторное произведение, возвращает новый
вектор перпендикулярный обоимlet v1 = new THREE.Vector3(1, 0, 0);
let v2 = new THREE.Vector3(0, 1, 0);
let cross = v1.clone().cross(v2); // (0, 0, 1)
Дополнительные методы
distanceTo(v) – расстояние между двумя точкамиlerp(v, alpha) – линейная интерполяцияapplyMatrix4(m) – применение 4x4 матрицы
трансформацииapplyQuaternion(q) – вращение с использованием
кватернионаv.applyMatrix4(new THREE.Matrix4().makeTranslation(1, 0, 0));
Проекции и направления
project(camera) – проекция вектора на экранные
координатыunproject(camera) – преобразование экранной точки
обратно в мирVector4 расширяет возможности до четырехмерного
пространства с компонентами x, y,
z, w. Основное применение — работа с
гомогенными координатами, трансформации и шейдерные операции.
let v = new THREE.Vector4(1, 2, 3, 1);
v.set(4, 5, 6, 0);
Арифметические операции
add, sub, multiplyScalar,
divideScalar работают аналогично Vector3multiply, divideНормализация и длина
let len = v.length();
v.normalize();
let dotProduct = v.dot(new THREE.Vector4(1, 0, 0, 0));
v.lerp(new THREE.Vector4(0, 0, 0, 0), 0.25);
Дополнительные методы
setComponent(index, value) и
getComponent(index) — доступ к компонентам по индексуfromArray(array, offset) и
toArray(array, offset) — инициализация и экспорт
данныхv.setComponent(2, 10); // изменяем z-компоненту
let arr = v.toArray(); // [x, y, z, w]
add, sub, normalize возвращают
сам объект, а не новый экземпляр, что позволяет цепочечный вызов:v.add(v2).normalize().multiplyScalar(5);
clone()
или copy():let vCopy = v.clone();
vCopy.copy(v2);
Использование в матрицах и кватернионах — для
трансформаций векторы Vector3 и Vector4 применяются напрямую с методами
applyMatrix4, applyQuaternion,
applyEuler.
Оптимизация вычислений — методы
lengthSq() и distanceToSquared() позволяют
избежать лишних операций корня при сравнении длин и расстояний.
Three.js обеспечивает полный набор функций для работы с векторами, позволяя легко реализовывать сложные геометрические и физические вычисления. Vector2 удобен для 2D задач, Vector3 является основным для 3D-сцен, а Vector4 необходим при работе с гомогенными координатами и матричными преобразованиями. Понимание всех методов и их особенностей критично для эффективного построения интерактивной графики и анимации.