Я создаю 2D-физический движок в c++ на основе Cyclone Physics Engine, http://procyclone.com, и я пытаюсь понять, почему в коде используется вектор силы тяжести, умноженный на массу, чтобы добавить силу к объекту,
void psiclone::Gravity::addForce(Body* body, double seconds) {
body->addForce(gravity * body->mass);
}
вместо
body->addForce(gravity * seconds);
Конечно, код предоставляет обновление(), включая
velocity.mX += acceleration.getX() * seconds;
но с двумя объектами, выполняемыми гравитацией, не должны ли они оба ударяться о землю одновременно, даже если у них разные массы?
Спасибо за ответы; При дальнейшем исследовании у меня не было строки в моей функции обновления (циклонная частица :: integrate()), умножая вектор ускорения на тело inverseMass:
acceleration *= inverseMass;
velocity += acceleration * seconds;
position += velocity * seconds;
Это позволило двум телам различной массы одновременно упасть на дно экрана и одновременно ударить.
Из физики мы знаем, что force = mass * acceleration
. Таким образом, чтобы рассчитать ускорение, они просто делят force
по mass
. Они просто придерживаются физических определений терминов. gravity * seconds
будет velocity
.
body->addForce(gravity*seconds)
физически неверна, вы говорите, что добавляете силу, но вы даете ей скорость.