В библиотеке Cannon.js физика объектов строится на
взаимодействии тел через силы и ограничения. Одним из ключевых
компонентов является подвеска (spring) — механизм,
соединяющий два тела и моделирующий упругую связь между ними. Подвеска
задается объектом CANNON.Spring, который принимает в
качестве параметров жесткость, длину покоя и демпфирование:
stiffness, restLength, damping.
Каждое из этих свойств влияет на поведение системы, создавая
реалистичные эффекты упругости и колебаний.
stiffness определяет силу упругости пружины. В Cannon.js сила, действующая на объекты, вычисляется по закону Гука:
[ F = -k (x - x_0)]
где:
Особенности использования stiffness:
Пример создания пружины с заданной жесткостью:
const spring = new CANNON.Spring(bodyA, bodyB, {
localAnchorA: new CANNON.Vec3(0, 0, 0),
localAnchorB: new CANNON.Vec3(0, 1, 0),
stiffness: 100,
restLength: 2,
damping: 1
});
restLength задаёт естественную длину подвески, при которой сила пружины равна нулю. Если расстояние между точками крепления равно restLength, пружина не создаёт ни растягивающей, ни сжимающей силы.
Применение и нюансы:
Пример:
spring.restLength = 3; // Пружина будет стремиться к длине 3 единицы
damping отвечает за затухание колебаний. Без демпфирования пружины будут бесконечно колебаться при растяжении и сжатии, создавая нестабильную систему. Формула силы демпфирования в Cannon.js:
[ F_d = -d v_{rel}]
где:
Ключевые моменты:
Пример настройки демпфирования:
spring.damping = 0.7; // Умеренное затухание
Эффект пружины зависит от комбинации всех трёх параметров:
Рекомендации при настройке:
restLength)
исходя из расстояния между объектами.Часто для визуально реалистичных симуляций применяют умеренно высокую stiffness и среднее damping, чтобы объекты быстро реагировали, но не «дрожали» бесконечно.
Cannon.js позволяет подключать пружины к симуляции через метод
world.addEventListener("postStep", ...), где вычисляется и
применяется сила:
world.addEventListener("postStep", function() {
spring.applyForce();
});
applyForce() учитывает текущее положение тел,
длину покоя, жесткость и демпфирование.postStep гарантирует корректное
применение силы после всех остальных обновлений физики.Такой подход позволяет создавать реалистичные механизмы: подвески машин, соединения мягких объектов, подвесные мосты или системы шарниров с упругими связями.
Комплексная настройка этих трёх параметров обеспечивает реалистичную физику и контроль над динамикой системы в Cannon.js.