在皮蒙克中,相对而言,重力的大小与
apply_force_at_local_point()
或 apply_force_at_world_point()
的大小相同。换句话说,gravity=(20,40)
的大小等于apply_force_at_world_point((20,40),<object's position>)
的大小吗?
我使用运动方程
final position = initial position + initial velocity * time + 1/2 * acceleration * t^2
来测试这一点。事实证明,这些幅度并不相等。例如,需要 (0,-7888)
的力才能等于 (0,-1750)
的重力。
我正在尝试确定等于/抵消重力的
apply_force_at_world_point()
力。我知道我可以将身体的重力设置为零来实现这种效果,但我的目标是确定足以悬浮给定重量和磁强度的磁铁的磁力。
如何找到等于重力的力的大小(无需测试一堆随机值)?
我希望所提供的信息足以理解问题
您可以在 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)
(我在一个简单的模拟中测试了这一点,具有一定的重力和球形/身体,它似乎按预期工作,而不是让球留在原处掉落)