gpt4 book ai didi

Javascript 精度缓解

转载 作者:行者123 更新时间:2023-11-30 17:18:51 34 4
gpt4 key购买 nike

enter image description here

我知道 javascript 舍入错误相当棘手,但我需要一些建议。

减少应用程序舍入误差的最佳方法是什么?我有一个立方体,应该是一个围绕大质量的轨道。立方体在每个轨道上都会获得大量的轨道动量,最终会在没有任何干预的情况下达到逃逸速度。

我需要一种轻量级的方法来防止这种情况发生。

我最好的选择是尝试找到一种方法来修复我的数字,还是我最好使用基于逻辑假设的纠错来捏造它并将其放回原处?

我的物理函数在这里:

function physPosition(object, delta){
// Update Position
object.position.x += (object.velocity.x * delta) + (0.5*object.acceleration.x* (Math.pow(delta,2)));
object.position.y += (object.velocity.y * delta) + (0.5*object.acceleration.y*(Math.pow(delta,2)));
object.position.z += (object.velocity.z * delta) + (0.5*object.acceleration.z*(Math.pow(delta,2)));

// Update Velocity (acceleration)
object.velocity.x += object.acceleration.x * delta;
object.velocity.y += object.acceleration.y * delta;
object.velocity.z += object.acceleration.z * delta;

// Update Velocity (gravity)
object.velocity.x += object.gravity.x * delta;
object.velocity.y += object.gravity.y * delta;
object.velocity.z += object.gravity.z * delta;

// Update Rotation
object.rotation.x += object.spin.x * delta;
object.rotation.y += object.spin.y * delta;
object.rotation.z += object.spin.z * delta;
}

函数 physGravity(a, b){
var grav = new THREE.Vector3(0, 0, 0);
grav = grav.subVectors(a.position, b.position);
var r = grav.lengthSq();
var A = (G)*(b.mass)/(r);
grav = grav.normalize();
grav.multiplyScalar(-A);
a.重力=重力;
}

最佳答案

您正在尝试对运动方程进行数值积分。这是一个有效的解决方案 - 另一个是计算运动方程的解析解,如德里克所建议的那样。问题是,您需要一个比您现在使用的解决方案更好的集成器。你应该尝试了解numerical integration .特别推荐 Runge-Kutta methods ,因为它们易于实现和使用。

您还可以找到一个包含数值积分方法的 JavaScript 库,并使用这些方法而不是实现您自己的方法。有一个例子 here使用四阶 Runge-Kutta 方法,以及 Numeric JavaScript library包含一个名为 dopri 的 Dormand-Prince 积分器。

关于Javascript 精度缓解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25562504/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com