我在循环中进行以下计算:
https://jsfiddle.net/0xLvxjar/
var i = 0;
var times = 200;
var friction = 0.9925;
var velocity = 10;
var position = 100;
for (; i < times; i += 1) {
velocity *= friction;
position += velocity;
}
console.log(velocity) // 2.218723008169958
console.log(position) // 1129.722321918849
我想将其重写为数学函数,并尽可能消除循环。
查看 JavaScript 数学对象:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math我没有看到可以处理此问题的方法。
是否有使用数学公式获得最终结果的更好方法?
最佳答案
用数学求解:
// v_1 = v_0 * f
// p_1 = p_0 + v_1
//
// p_2 = p_1 + v_1 * f
// = p_0 + v_1 + v_1 * f
// = p_0 + v_0 * f + v_0 * f * f
// = p_0 + v_0 * (f + f^2)
此时您可能会看到 p_n = p_0 + v_0 * (f + f^2 + f^3 + ... + f^n)
。
根据您的处方集,您可能知道这是真的:
因此 p_n = p_0 + v_0 * f * (1 - f^n)/(1 - f)
。
转移到 JavaScript 你会得到这个:
var n = 200;
var friction = 0.9925;
var velocity_0 = 10.0;
var position_0 = 100.0;
var velocity_n = velocity_0 * Math.pow(friction, n);
var position_n = position_0 + velocity_0 * friction * (1 - Math.pow(friction, n)) / (1 - friction);
alert(velocity_n);
alert(position_n);
关于循环中的 Javascript 赋值乘法运算符作为数学函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29184696/