Библиотека Oimo.js предоставляет мощные средства для реализации физики твердых тел в браузере на JavaScript. Одной из ключевых возможностей являются суставы (joints), позволяющие создавать соединения между объектами с различными степенями свободы. Среди них RevoluteJoint занимает особое место, так как обеспечивает вращательное соединение вокруг одной оси и позволяет применять моторный привод для управления угловой скоростью.
RevoluteJoint представляет собой шарнир, соединяющий два тела и ограничивающий движение относительно одной оси вращения. Основные параметры включают:
body1, body2 — соединяемые тела
(Oimo.RigidBody).localAnchor1, localAnchor2 — точки
крепления относительно центра масс тел.localAxis1, localAxis2 — направление оси
вращения в локальных координатах каждого тела.lowerLimit, upperLimit — ограничения угла
вращения (в радианах).enableLimit — флаг активации ограничений угла.enableMotor — флаг включения моторного привода.motorSpeed — заданная скорость вращения (рад/с).maxMotorTorque — максимальный момент, который мотор
может приложить к суставу.Пример создания базового RevoluteJoint:
const joint = new OIMO.RevoluteJoint({
body1: box1,
body2: box2,
localAnchor1: new OIMO.Vec3(0, 1, 0),
localAnchor2: new OIMO.Vec3(0, -1, 0),
localAxis1: new OIMO.Vec3(0, 0, 1),
enableMotor: true,
motorSpeed: 5,
maxMotorTorque: 10
});
world.addJoint(joint);
Мотор в RevoluteJoint используется для управления вращением между
двумя телами. При включении enableMotor можно:
motorSpeed),maxMotorTorque).Мотор работает независимо от физических ограничений тел, но при этом взаимодействует с ними через реакцию силы. Это позволяет создавать как реалистичные физические механизмы, так и анимационные эффекты с управляемым вращением.
Принципы работы мотора:
motorSpeed.maxMotorTorque.Если текущий момент превышает maxMotorTorque, мотор не
способен полностью реализовать заданную скорость, что позволяет
моделировать реальные физические ограничения двигателя.
enableLimit, lowerLimit и
upperLimit позволяют ограничивать вращение в определенном
диапазоне. В сочетании с мотором это дает возможность:
Пример установки ограничений:
joint.enableLimit = true;
joint.lowerLimit = -Math.PI / 4;
joint.upperLimit = Math.PI / 4;
RevoluteJoint в Oimo.js можно модифицировать во время симуляции:
joint.setMotorSpeed(value) — изменяет скорость мотора
динамически.joint.setMaxMotorTorque(value) — изменяет предел
прикладываемого момента.joint.setLimits(lower, upper) — динамически изменяет
диапазон углового ограничения.Это открывает возможности для создания адаптивных систем: робототехника, контролируемые дверные петли, вращающиеся платформы.
RevoluteJoint можно использовать в цепочках и комбинациях:
Важно учитывать сила трения и момент инерции тел,
так как слишком маленький maxMotorTorque не позволит
преодолеть сопротивление, а слишком большой момент может вызвать
нестабильность симуляции.
maxMotorTorque, особенно при
высоких массах и моментах инерции.RevoluteJoint с мотором позволяет моделировать:
Эта комбинация физических ограничений и моторного управления делает RevoluteJoint ключевым инструментом для построения интерактивных и реалистичных механических систем в браузере на JavaScript с помощью Oimo.js.