Я понимаю, что 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;
}
function 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.gravity = grav; }
Лучший способ справиться с накопленными ошибками imo - описать путь с математическими уравнениями, вместо этого вычисляя новые значения снова и снова. –
Не могу вспомнить свою математику. Можете ли вы разместить соответствующие формулы? Если у вас есть параметрическая формула, как предлагает Дерек, у вас не будет этой проблемы, поэтому я предполагаю, что вы используете инкрементный расчет 'dx' и' dy'? – Amadan
Я добавил соответствующий код. Он также вычисляет гравитационное притяжение в каждой физической структуре. –