使用Pymunk提升,拖动或浮力

问题描述 投票:1回答:1

我是Pymunk的新手。由于有了一些不错的教程,我得以轻松进行第一次模拟。我现在想知道是否可以轻松模拟空气阻力和/或浮力。有什么例子吗?

drag lift pymunk
1个回答
0
投票

[目前尚无简便的方法(自Pymunk 5.6起)。

空间对象具有阻尼特性。但这是非常基本的,因此不确定是否涵盖您的用例。

否则,您需要自己实现一些功能。您可以从这些中得到一些启发:

[Pymunk中的arrow.py示例中有一个拖动示例:https://github.com/viblo/pymunk/blob/08fb141b81c0240513fc16e276d5ade5b0506512/examples/arrows.py#L139

drag_constant = 0.0002

pointing_direction = Vec2d(1,0).rotated(flying_arrow.angle)
flight_direction = Vec2d(flying_arrow.velocity)
flight_speed = flight_direction.normalize_return_length()
dot = flight_direction.dot(pointing_direction)
# (1-abs(dot)) can be replaced with (1-dot) to make arrows turn 
# around even when fired straight up. Might not be as accurate, but 
# maybe look better.
drag_force_magnitude = (1-abs(dot)) * flight_speed **2 * drag_constant * flying_arrow.mass
arrow_tail_position = Vec2d(-50, 0).rotated(flying_arrow.angle)
flying_arrow.apply_impulse_at_world_point(drag_force_magnitude * -flight_direction, arrow_tail_position)

flying_arrow.angular_velocity *= 0.5

花栗鼠github存储库包含Bouyancy的完整示例,在这里:https://github.com/slembcke/Chipmunk2D/blob/master/demo/Buoyancy.c这段代码在c中,使用Chipmunk(Pymunk用于进行实际物理计算的c库)。如果您是一位经验丰富的程序员,通常很容易将Chipmunk示例转换为Python / Pymunk。

© www.soinside.com 2019 - 2024. All rights reserved.