首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Pymunk的盒子重量

使用Pymunk的盒子重量
EN

Stack Overflow用户
提问于 2020-07-29 22:22:39
回答 1查看 136关注 0票数 2

我编写了下面的程序,目的是模拟一个使用刀刃的重量平衡实验。然而,盒子的重量并没有像模拟时所显示的那样影响片段。目前,我刚开始学习如何使用pymunk编写代码。请帮我解决这个问题

代码语言:javascript
复制
    import pyglet
    import pymunk
    import chipmunk
    from pymunk import Vec2d
    from pymunk.pyglet_util import DrawOptions

    window = pyglet.window.Window(800,600,"Knife Edge Mass Balancing Simulation",resizable=False)# W,H
    options=DrawOptions()

    space=pymunk.Space()
    space.gravity= 0,-100

    mass = 1
    radius=30


    ground_moment = pymunk.moment_for_segment(800,(0,0),(800,0),2)
    ground_body = pymunk.Body(body_type=pymunk.Body.STATIC)
    ground_shape = pymunk.Segment(ground_body,(0,0),(800,0),20)
    ground_body.position=0,100
    ground_body.elasticity=0.1
    ground_body.friction=0.1

    poly_shape=pymunk.Poly(None,((0,0),(100,0),(50,150)))
    poly_moment = pymunk.moment_for_poly(500,poly_shape.get_vertices())
    poly_body=pymunk.Body(body_type=pymunk.Body.STATIC)
    poly_shape.body=poly_body
    poly_body.position = 350,100
    poly_body.elasticity=0.1


    segment_moment = pymunk.moment_for_segment(mass,(0,0),(300,0),2)
    segment_body = pymunk.Body(mass,segment_moment)
    segment_shape = pymunk.Segment(segment_body,(0,0),(400,0),5)
    segment_body.position= 210,250
    segment_shape.elasticity = 0.1
    segment_shape.friction = 0.1

    size = 20
    box_mass = 0.0

    moment = pymunk.moment_for_box(box_mass, (size, size))
    box_body = pymunk.Body(box_mass, moment)
    box_body.position = Vec2d(300, 265.5)
    box_shape = pymunk.Poly.create_box(box_body, (size, size))
    box_shape.friction = 0.8
    box_shape.elasticity = 0.1


    space.add(ground_body, ground_shape,poly_body,poly_shape,segment_body, segment_shape, box_body, box_shape)


   @window.event
   def on_draw():
   window.clear()
   space.debug_draw(options)

   def update(dt):
   space.step(dt)

   if __name__=="__main__":
       pyglet.clock.schedule_interval(update,1.0/60)
       pyglet.app.run()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-01 06:40:07

问题是,分段形状的重量在一端,而不是在中间。这是因为在Pymunk中的重量是在形状的身体位置收集的。

尝试将段代码更改为如下所示:

代码语言:javascript
复制
segment_moment = pymunk.moment_for_segment(mass,(-150,0),(150,0),2)
segment_body = pymunk.Body(mass,segment_moment)
segment_shape = pymunk.Segment(segment_body,(-200,0),(200,0),5)
segment_body.position= 400,250
segment_shape.elasticity = 0.1
segment_shape.friction = 0.1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63163317

复制
相关文章

相似问题

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