我有兴趣模拟一种杆摆系统:
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)但它并没有像我所期望的那样运作。
,
,
,
发布于 2021-08-11 06:29:57
,
,
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,
pymunk.moment_for_segment(1000, (0, -40), (0, 40), 6)计算矩为717000,这与代码中的值非常不同。您还可以让Pymunk从附加的形状( http://www.pymunk.org/en/latest/pymunk.html#pymunk.Body.__init__)中计算物体的质量和力矩。
最后一个注意事项是,在space.step函数中使用尽可能小的dt可能是个好主意,因为这将产生更好的模拟。
https://stackoverflow.com/questions/68567292
复制相似问题