В физическом движке Oimo.js масса тел определяется через их плотность и геометрические параметры. Понимание взаимосвязи между плотностью и массой критично для корректной симуляции физических процессов, таких как столкновения, падения, инерция и устойчивость объектов.
В Oimo.js масса тела ( m ) вычисляется как произведение плотности ( ) на объем ( V ):
[ m = V]
Плотность (( )) — физическая характеристика материала объекта, определяющая массу на единицу объема.
Объем (( V )) — определяется геометрией тела. Для стандартных примитивов Oimo.js вычисляется по формулам:
Изменение плотности напрямую влияет на массу, а значит, на поведение тела в динамике: чем выше плотность, тем тяжелее объект при том же объеме.
При создании тела через OIMO.Body или его конфигурацию
можно задавать плотность через свойство density внутри
формы:
const boxShape = new OIMO.Shape({
type: 'box',
size: [2, 2, 2],
density: 1.5 // плотность материала
});
const boxBody = new OIMO.Body({
type: 'dynamic',
position: [0, 5, 0],
shapes: [boxShape]
});
type: 'static') плотность
игнорируется, так как их масса не участвует в динамике.Инерция и ускорение Ускорение тела при действии силы ( F ) вычисляется по закону Ньютона: [ a = ] Более плотные объекты медленнее реагируют на одинаковую силу.
Столкновения Масса тела определяет, как оно влияет на другие объекты при столкновении. Более тяжелые тела передают больше импульса, что важно для симуляции реалистичных реакций.
Устойчивость конструкции При создании сложных сборок из нескольких тел правильный выбор плотности обеспечивает устойчивость и предотвращает «проваливание» или «подпрыгивание» объектов.
Для куба со стороной 2 единицы и плотностью 1.5:
[ V = 2 = 8] [ m = 1.5 = 12]
Для сферы радиусом 1 и плотностью 2:
[ V = ^3 ] [ m = 2 ]
Эти значения автоматически учитываются движком при расчете динамики.
Для тел с несколькими формами Oimo.js суммирует массы отдельных форм. Если одна форма имеет большую плотность, это увеличивает общую массу тела, что может менять центр масс и момент инерции.
const sphere = new OIMO.Shape({ type: 'sphere', size: [1], density: 2 });
const cube = new OIMO.Shape({ type: 'box', size: [1,1,1], density: 0.5 });
const complexBody = new OIMO.Body({
type: 'dynamic',
position: [0, 5, 0],
shapes: [sphere, cube]
});
В этом примере общая масса тела равна сумме массы сферы и куба, и динамика учитывает различие плотностей.
Плотность является ключевым параметром для управления массой объектов в Oimo.js. Масса определяет ускорение, импульс при столкновениях и стабильность конструкций. Корректная настройка плотности обеспечивает реалистичную физику, позволяя создавать объекты с нужным весом и динамикой.