Плотность и её влияние на массу

В физическом движке Oimo.js масса тел определяется через их плотность и геометрические параметры. Понимание взаимосвязи между плотностью и массой критично для корректной симуляции физических процессов, таких как столкновения, падения, инерция и устойчивость объектов.


Определение плотности и массы

В Oimo.js масса тела ( m ) вычисляется как произведение плотности ( ) на объем ( V ):

[ m = V]

  • Плотность (( )) — физическая характеристика материала объекта, определяющая массу на единицу объема.

  • Объем (( V )) — определяется геометрией тела. Для стандартных примитивов Oimo.js вычисляется по формулам:

    • Куб: ( V = width height depth )
    • Сфера: ( V = r^3 )
    • Цилиндр: ( V = r^2 h )

Изменение плотности напрямую влияет на массу, а значит, на поведение тела в динамике: чем выше плотность, тем тяжелее объект при том же объеме.


Настройка плотности в 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]
});
  • dynamic — тело, подверженное физике (масса учитывается).
  • density задается в условных единицах Oimo.js и автоматически переводится в массу с учетом объема формы.
  • Для статических тел (type: 'static') плотность игнорируется, так как их масса не участвует в динамике.

Влияние массы на физическое поведение

  1. Инерция и ускорение Ускорение тела при действии силы ( F ) вычисляется по закону Ньютона: [ a = ] Более плотные объекты медленнее реагируют на одинаковую силу.

  2. Столкновения Масса тела определяет, как оно влияет на другие объекты при столкновении. Более тяжелые тела передают больше импульса, что важно для симуляции реалистичных реакций.

  3. Устойчивость конструкции При создании сложных сборок из нескольких тел правильный выбор плотности обеспечивает устойчивость и предотвращает «проваливание» или «подпрыгивание» объектов.


Примеры расчета массы

Для куба со стороной 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. Масса определяет ускорение, импульс при столкновениях и стабильность конструкций. Корректная настройка плотности обеспечивает реалистичную физику, позволяя создавать объекты с нужным весом и динамикой.