В физическом движке Oimo.js расчёт инерции играет ключевую роль в реалистичном поведении объектов. Инерция определяет, как тело сопротивляется изменению своей скорости при приложении силы или момента. В Oimo.js этот параметр рассчитывается автоматически для стандартных форм или может быть задан вручную при создании тел. Форма объекта напрямую влияет на матрицу инерции, которая используется для вычисления вращательной динамики.
Oimo.js поддерживает несколько основных типов тел:
Box (Прямоугольный параллелепипед) Для тела с
размерами width, height, depth
матрица инерции рассчитывается по формулам классической механики:
[ I_{xx} = m (h^2 + d^2), I_{yy} = m (w^2 + d^2), I_{zz} = m (w^2 + h^2)]
где m — масса тела, w, h,
d — размеры по осям X, Y и Z.
Sphere (Сфера) Инерция сферы с радиусом
r определяется формулой:
[ I = m r^2]
Здесь матрица инерции является диагональной и одинакова по всем трем осям.
Cylinder (Цилиндр) Для цилиндра с радиусом
r и высотой h:
[ I_{xx} = I_{zz} = m (3 r^2 + h^2), I_{yy} = m r^2]
Направление оси цилиндра учитывается при расчёте матрицы инерции.
Capsule (Капсула) Капсула состоит из цилиндра с полусферами на концах. Инерция комбинирует вычисления для цилиндра и сфер, что делает расчёт более сложным. Oimo.js использует аппроксимацию для ускорения вычислений, объединяя компоненты через сумму вкладов цилиндра и полусфер.
Матрица инерции — это 3x3 диагональная или почти диагональная
матрица, которая описывает сопротивление тела вращению
относительно каждой оси. В Oimo.js она хранится в структуре
OIMO.Mat33 и используется при интеграции вращательной
скорости и момента силы.
Расположение центра масс относительно геометрии тела напрямую влияет на инерцию. Для симметричных тел центр масс совпадает с геометрическим центром, и матрица инерции остаётся диагональной. Для асимметричных тел необходимо учитывать смещение центра масс при вычислении матрицы:
[ I’ = I + m ]
где x, y, z — смещение центра масс относительно
локальной системы координат. Oimo.js позволяет задать смещение через
shape.position и корректно пересчитывает матрицу
инерции.
Для сложных объектов, объединяющих несколько простых форм, Oimo.js использует композиционный метод:
Это важно для объектов типа автомобилей, роботов или составных конструкций, где форма каждого компонента сильно влияет на поведение тела при вращении.
OIMO.Body с формой OIMO.Box,
OIMO.Sphere и др. библиотека сама вычисляет матрицу
инерции.body.inertia
можно задать матрицу инерции вручную для специфических симуляций.Правильная настройка формы и соответствующей матрицы инерции обеспечивает корректное поведение объектов в сценах Oimo.js, предотвращает «неестественное» вращение и улучшает стабильность симуляции.