Относительные размеры pymunk сил

#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, если таковая имеется