首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于pymunk准确性的几个问题

关于pymunk准确性的几个问题
EN

Stack Overflow用户
提问于 2021-07-28 20:59:47
回答 1查看 96关注 0票数 1

我有兴趣模拟一种杆摆系统:

代码语言:javascript
运行
复制
from intro import pymunk, space, App
import pygame
from pymunk.vec2d import Vec2d

pygame.init()


b0 = space.static_body                      #declare a universe

b1 = pymunk.Body(mass=1000, moment=10)
b1.position = (240, 200)
c1 = pymunk.Segment(b1, (0, -40), (0, 40), 6)
c1.elasticity = 0.1
space.add(b1, c1)

b2 = pymunk.Body(mass=.1, moment=1)
b2.position = (240, 100)
c2 = pymunk.Segment(b2, (0, 0), (0, -40), 6)
c2.elasticity = 0.1
space.add(b2, c2)

j1 = pymunk.constraints.PinJoint(b0, b1, (240, 200), (0,0))
j2 = pymunk.constraints.PinJoint(b2, b1, (0, 0),(0,-40))

space.add(j1, j2)
b1.torque = 4000
space.gravity = 0,0                 #gx , gy
print(b1.position, b1.velocity)
App().run()
print(b1.position, b1.velocity)

但它并没有像我所期望的那样运作。

  1. ,我在主杆上有一个固定的扭矩。我认为,随着时间的推移,独立的系统应该会慢慢加速。我没有看到,

  1. ,次级杆,似乎没有感觉到向心加速度。我会认为,当它被旋转,它会想要指向外。我认为这与模拟质量的分布有关。我是否需要将二次杆变成一系列的质量,或者是否有更容易的方法移动质量中心?
  2. I可以改变主杆与次杆的质量比。当M1>>M2认为系统只会旋转时,我会假设,就好像没有二次棒一样。但是我没有看到,相反,主杆在摆动,就好像它在把大量的角动量转移到次级杆上一样。我是不是漏掉了什么?

  1. ,甚至应该是一个可靠的物理模拟器?或者它只是近似于物理,只是足够好成为一个游戏的一部分?
  2. ,有一个基于蟒蛇的物理模拟器,你会推荐给这样一个系统。最后,我希望能够通过可变扭矩和拖动来模拟振荡,同时记录系统上的力。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-11 06:29:57

  1. ,扭矩每一步都会被重置,就像这里写的那样:考虑到这一点,我认为预期会随着时间的推移而减慢。我还应该补充一点,通常手动设置这类值有点棘手,最好是使用SimpleMotor约束。

  1. ,是的,正如你写的一样,重心似乎是这里的问题。重心将位于分段的0,0 (如果创建多边形形状,则类似于0,0 )。所以,c1的重心在中间,而c2的重心在一端。您可以将c2的定义更改为(b2, (0,-20), (0,20)...)并修改主体的位置以进行补偿,也可以使用body center_of_gravity属性来调整其位置。http://www.pymunk.org/en/latest/pymunk.html#pymunk.Body.center_of_gravity

  1. ,我认为问题是,你用在两段身体上的那一刻是非常极端的。矩可以用内置方法moment_for_segment计算,例如:pymunk.moment_for_segment(1000, (0, -40), (0, 40), 6)计算矩为717000,这与代码中的值非常不同。您还可以让Pymunk从附加的形状( http://www.pymunk.org/en/latest/pymunk.html#pymunk.Body.__init__

)中计算物体的质量和力矩。

  1. Pymunk使用C库花栗鼠进行实际模拟。这个库的重点主要是游戏或其他实时用途,而Pymunk也是如此。但是,我知道Pymunk被用于许多不同的目的,如这里的使用列表:http://www.pymunk.org/en/latest/showcase.html页面所示。如果Pymunk内部的算法对您的用例来说足够精确和全面,我不知道。

  1. 不确定,

最后一个注意事项是,在space.step函数中使用尽可能小的dt可能是个好主意,因为这将产生更好的模拟。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68567292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档