【发布时间】:2021-12-29 21:27:31
【问题描述】:
我正在模拟两个弹簧和一个质量。我已经使用一些图形元素通过 VPython 实现了它。我使用 Vpython 中的滑块函数来尝试更改球的半径和质量变量,但它不能正常工作。我希望滑块实时更改质量的值和球的半径。有人可以帮我吗:(?
这是代码:
这是球的信息
massball=1
mass=massball
radius=2.5
ball=sphere(pos=vector(2,0,0),velocity=vector(0,0,0),radius=radius,mass=massball, color=color.blue)
这是滑块的信息
scene2.caption = "Variación de la masa: Variación del radio:"
sl = slider(min=0.3, max=10, value=massball, length=220, bind=acc(), right=15)
sl2 = slider(min=0.3, max=10, value=radius, length=220, bind=acc(), right=15)
这是影响球位置的主循环
t=0
dt=0.01
while (t<100):
rate(500)
ball.velocity=ball.velocity+acc()*dt
ball.pos=ball.pos+ball.velocity*dt
spring_right.axis=ball.pos - wall_right.pos
spring_left.axis=ball.pos - wall_left.pos
ball.trail.append(pos=ball.pos)
t=t+dt
【问题讨论】:
-
现在我们不能简单地复制所有代码并运行它。您是否在控制台/终端中运行它?当我运行以前的版本时,它会在控制台中显示错误。
bind=需要没有()的函数名称 -bind=acc- 当您移动 silder 时,它将使用()运行它acc()。 -
我正在使用最新版本的 VPython 和 Spyder,我也使用了 VPython7 中描述的函数来制作所有程序。我真的不知道为什么它在您的控制台中显示错误:(
-
我认为
bind=acc没用。滑块运行acc(),但无法获得返回值,也无法使用while循环改变位置。 -
正如我所说 - 它显示错误,因为您在
bind=acc()中使用了()。bind只需要名称bind=acc并且当您移动滑块时,它应该使用()来运行此功能。目前它作为value = acc()和bind=value工作 - 所以它分配了一些value,而不是函数,它尝试运行value()但value不是函数,这会引发错误。 -
顺便说一句:您可以添加有问题的链接。更多的人会看到它——也许会有更多的人帮助你。
标签: python css animation vpython