- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Stack Overflow 上发表的第一篇文章,请多多包涵。我使用 pymunk 物理库在 python 中构建了一个混沌双摆模型,该库又使用 chipmunk C 库。钟摆是混沌的,对初始条件非常敏感。然而,我已经意识到,即使我在完全相同的初始条件下运行模拟(无论如何更改零代码),这两个模拟也会很快出现差异。
我的代码中有些东西可能会在每次运行时产生不同的结果。因为模拟是困惑的,所以在我的运行之间任何不恒定的微小错误都可能导致巨大的变化。
这可能是什么原因造成的?我不确定这是否是 chipmunk、pymunk 甚至 python 或我的 OS/PC 中的小缺陷造成的。
编辑:
这是我的代码:
import pyglet
import pymunk
import pymunk.pyglet_util
def add_pendulum(space):
static_body = pymunk.Body()
static_body.position = 400, 400
mass = 10
inertia = pymunk.moment_for_box(mass, 5, 100)
body1 = pymunk.Body(mass, inertia)
body1.position = 350, 400
l1 = pymunk.Poly(body1, [(50, 0), (-50, 0), (-50, 5), (50, 5)])
l1.friction = 0.1
l1.collision_type = 2
pivot_joint = pymunk.PivotJoint(static_body, body1, (400, 400))
space.add(body1, l1, pivot_joint)
mass = 10
inertia = pymunk.moment_for_box(mass, 5, 100)
body2 = pymunk.Body(mass, inertia)
body2.position = 250, 400
l2 = pymunk.Poly(body2, [(50, 0), (-50, 0), (-50, 5), (50, 5)])
l2.friction = 0.1
l2.collision_type = 2
pivot_joint2 = pymunk.PivotJoint(body1, body2, (300, 402.5))
space.add(body2, l2, pivot_joint2)
# A hack to disable all collisions
nocollisions = lambda space, arbiter: False
space.add_collision_handler(2, 2, nocollisions, nocollisions, nocollisions, nocollisions)
window = pyglet.window.Window(800, 600)
space = pymunk.Space()
add_pendulum(space)
space.gravity = (0, -10)
test = [()] # A temporary hack to hide the tuple in a mutable object
def on_draw(dt): #For graphing the moving pendulum
points = test[0]
space.step(dt)
pyglet.gl.glClearColor(0, 0, 0, 1)
window.clear()
pymunk.pyglet_util.draw(space)
points += (int(tuple(space.shapes[1].get_vertices()[1])[0]), int(tuple(space.shapes[1].get_vertices()[1])[1]))
pyglet.gl.glClearColor(200, 200, 200, 1)
pyglet.graphics.draw(len(points)/2, pyglet.gl.GL_POINTS,
('v2i', points)
)
test[0] = points
pyglet.clock.schedule_interval(on_draw, 1/1000.0)
pyglet.app.run()
最佳答案
关于从 pyglet.clock.schedule_interval
调用的 on_draw(dt)
函数,pyglet docs状态:
The dt parameter gives the number of seconds (due to latency, load and timer inprecision, this might be slightly more or less than the requested interval).
每次运行程序时,它都会调用 on_draw
并使用略有不同的 dt
参数。您继续调用 space.step(dt)
,每次调用都会略有不同。鉴于您的程序对不断变化的条件有多敏感,我认为这是罪魁祸首。
不确定是否有帮助,但是 here 是关于固定或可变时间步长和物理(以及游戏引擎)的另一个问题。
关于python - 具有相同初始条件的混沌摆表现出混沌行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36612328/
我正在研究土星系统的模拟,例如,它允许用户将其最大的卫星土卫六的质量增加到地球的质量,并查看其他卫星和土星环如何因此受到扰动。我对环的表示是一个粗略的粒子系统,其中每个粒子都以一组 x、y、z 位置和
我是一名优秀的程序员,十分优秀!