#simulation #gravity #pymunk
#Симуляция #гравитация #pymunk
Вопрос:
В Pymunk величина силы тяжести совпадает с величиной apply_force_at_local_point или apply_force_at_world_point , условно говоря. Другими словами, равна ли величина силы тяжести =(20,40) величине apply_force_at_world_point((20,40), положение объекта).
Я использовал уравнение движения, конечное положение = начальное положение начальная скорость * время 1/2 * ускорение * t ^ 2, чтобы проверить это. Оказывается, что эти величины не равны. Например, потребовалась сила (0, -7888), равная силе тяжести (0, -1750).
Я пытаюсь определить силу apply_force_at_world_point, которая будет равна / отменять гравитацию. Я знаю, что могу просто установить гравитацию тела на ноль для достижения этого эффекта, но моя цель — определить магнитную силу, которой было бы достаточно, чтобы поднять магнит заданного веса и магнитной силы.
Как я могу найти величину силы (без тестирования набора случайных значений), которая была бы равна силе тяжести.
Я надеюсь, что приведенной информации достаточно, чтобы понять проблему
Ответ №1:
Вы можете видеть, как обновляется скорость тела в исходном коде Chipmunk: https://github.com/viblo/Chipmunk2D/blob/master/src/cpBody.c#L501
body->v = cpvadd(cpvmult(body->v, damping), cpvmult(cpvadd(gravity, cpvmult(body->f, body->m_inv)), dt));
В переводе на Python / Pymunk это будет что-то вроде этого:
body.velocity = body.velocity * damping (gravity body.force / body.mass) * dt
Исходя из этого, я думаю, это должно сработать, чтобы противодействующая сила соответствовала силе тяжести:
body.apply_force_at_local_point(-space.gravity * body.mass)
(Я протестировал это в простом моделировании с некоторой гравитацией и формой / телом шара, и, похоже, оно работает так, как ожидалось, вместо того, чтобы падать, мяч оставался на месте)
Комментарии:
1. Большое тебе спасибо, viblo. Вы находка. Еще один вопрос, который здесь уместен. Когда я говорю space.gravity = 0, -10, означает ли это, что тело будет двигаться «вниз» на 10 единиц в первую секунду, а затем на 20 единиц во вторую секунду и так далее, как ускорение работает в реальной жизни. Какую роль здесь играет dt, если таковая имеется