我正在尝试根据物体速度确定检查壁架的距离。这样物体就可以停止加速并让摩擦力停止。
问题
摩擦力为0.9 * horizontalSpeed每一步。
当horizontalSpeed小于0.001时,我们将horizontalSpeed设置为0
达到0.001所需的时间是horizontalSpeed = 1
我目前如何解决
var horizontalSpeed = 1
var friction = 0.9
var closeEnoughToZero = 0.001
var distance = 0
while(horizontalSpeed > closeEnoughToZero) {
horizontalSpeed *= friction
distance += horizontalSpeed
}
console.log(distance) // 8.99
可能已经解决了我只是觉得它有点蛮力,可能是某种类型的数学函数,这对于此非常方便!
答案 0 :(得分:2)
这是一个纯粹的数学"解决方案
var horizontalSpeed = 1
var friction = 0.9
var closeEnoughToZero = 0.001
var distance = (horizontalSpeed * friction)/(1-friction)
console.log(distance)

或者,如果"足够接近零",那也可以在没有循环的情况下完成
var horizontalSpeed = 1
var friction = 0.9
var closeEnoughToZero = 0.001
var distance = 0
// this is the power you need to raise "friction" to, to get closeEnoughToZero
let n = Math.ceil(Math.log(closeEnoughToZero)/Math.log(friction));
// now use the formula for Sum of the first n terms of a geometric series
let totalDistance = horizontalSpeed * friction * (1 - Math.pow(friction, n))/(1-friction);
console.log(totalDistance);

我使用Math.ceil
的{{1}} - 在你的情况下是66.如果你为你的代码添加了一个循环计数器,你会看到循环执行66次
并且,正如您所看到的,第二个代码产生与循环完全相同的输出。