btMatrix3x3 — это класс библиотеки Ammo.js,
предназначенный для представления 3×3 матриц вращения в трёхмерной
физике. В 3D-пространстве он используется для описания ориентации
объектов, преобразований координат и вычисления углов Эйлера или
кватернионов. Каждый объект btMatrix3x3 хранит девять чисел
в формате строки из трёх векторов (столбцов или строк, в зависимости от
использования).
Ключевыми свойствами матрицы являются:
btVector3, определяющие оси локальной системы
координат.let m = new Ammo.btMatrix3x3();
По умолчанию создаётся единичная матрица. Возможна инициализация через три вектора:
let xAxis = new Ammo.btVector3(1, 0, 0);
let yAxis = new Ammo.btVector3(0, 1, 0);
let zAxis = new Ammo.btVector3(0, 0, 1);
let m = new Ammo.btMatrix3x3(xAxis, yAxis, zAxis);
Можно также задать элементы напрямую:
let m = new Ammo.btMatrix3x3();
m.setValue(1,0,0, 0,1,0, 0,0,1); // строки матрицы
Метод setValue принимает элементы построчно:
(m00, m01, m02, m10, m11, m12, m20, m21, m22).
Устанавливает ориентацию матрицы через углы Эйлера:
let m = new Ammo.btMatrix3x3();
m.setEulerYPR(Math.PI/2, 0, 0); // поворот на 90° вокруг оси Y
Устанавливает матрицу на основе кватерниона
btQuaternion:
let q = new Ammo.btQuaternion(0, 1, 0, 0); // пример кватерниона
let m = new Ammo.btMatrix3x3();
m.setRotation(q);
Конвертирует текущую матрицу в кватернион:
let q = new Ammo.btQuaternion();
m.getRotation(q);
Возвращает строку матрицы как btVector3:
let row = new Ammo.btVector3();
m.getRow(0, row); // первая строка
Возвращает матрицу в единичное состояние:
m.setIdentity();
Умножение матрицы на вектор:
let v = new Ammo.btVector3(1, 2, 3);
let result = new Ammo.btVector3();
m.mult(v, result); // result = m * v
Умножение матрицы на другую матрицу в btMatrix3x3
выполняется через конструктор:
let m2 = new Ammo.btMatrix3x3();
let combined = new Ammo.btMatrix3x3();
Ammo.btMatrix3x3.multiply(m, m2, combined);
Транспонирование матрицы:
let mT = new Ammo.btMatrix3x3(m);
mT.transpose();
Транспонированная матрица используется для обратных преобразований, например, при переходе из мировых координат в локальные.
btMatrix3x3 широко используется в:
Пример комбинирования с btTransform:
let transform = new Ammo.btTransform();
transform.setOrigin(new Ammo.btVector3(0, 5, 0));
transform.setBasis(m); // применяем матрицу вращения
btMatrix3x3 выступает мостом между различными способами
представления ориентации:
Методы setEulerYPR, setRotation,
getRotation позволяют конвертировать ориентацию между
системами без потери точности.
btVector3 и btMatrix3x3, чтобы избежать лишних
аллокаций памяти.btMatrix3x3
использовать для вычислений с векторами и btTransform.В игровых и симуляционных проектах btMatrix3x3
позволяет:
Использование btMatrix3x3 обеспечивает гибкость при
работе с вращениями и делает интеграцию с физическим движком более
интуитивной и эффективной.