Я хочу применить силу перетаскивания к телу cannon.js , я пытался каким-то образом, но это нарушает физику, хотел знать, есть ли более правильный путь или кто-тоуже сделал нечто подобное.
Существует свойство тела, называемое linearDamping
, это сила сопротивления, линейно пропорциональная скорости, однако я пытаюсь реализовать формулу силы сопротивления жидкости, чтобы добиться большего реализма..
Упрощенная формула такая, как вы можете видеть, она квадратично пропорциональна скорости:
Fd = - Constant * getMagnitude(velocity)**2 * normalize(velocity)
Я реализовал в cannon.js таким образом, используя методы Vec3 .Обратите внимание, что я называю applyDrag
каждое обновление:
applyDrag(coefficient) {
const speed = body.velocity.length()
const dragMagnitude = coefficient * Math.pow(speed, 2)
const drag = body.velocity.clone()
drag.scale(-1, drag)
drag.normalize()
drag.scale(dragMagnitude, drag)
body.applyLocalForce(drag, new CANNON.Vec3())
}
Однако этот сорт разбивается, и объекты сходят с ума.Есть ли лучший способ применить какой-нибудь quadraticDamping
?
Это та часть, где применяется linearDamping
, у меня возникают трудности с полным пониманием этого кода и попыткой реализоватьквадратичное демпфирование в правильном направлении.