关于这个问题,我已经问了一个类似的问题,但我和我的同事仍然无法解决这个问题。有关该问题的更多信息,请参阅my first question。
我们定义了不同的物体(太阳和太阳系的行星)以及它们之间的作用力。现在我们想定义一个菜单,让我们有可能选择一个对象:然后它将被定义为当前对象,模拟用户将能够使用滑块改变其质量。我们得到的第一个问题的答案是,必须在使用函数"def M(m)“之前定义一个currentobject,所以我们将sun定义为currentobject。以下是我们关于模拟这一部分的代码片段:
sun = sphere( pos=vector(0,0,0), radius=6.96E+09, texture="https://i.imgur.com/DTm6i8r.jpg",
mass = 1.989e30, momentum=vector(0,0,0), make_trail=True, visible=True ) #example of a defined object
currentobject=sun
def M(m):
global col, sun, mercury, venus, earth, mars, jupiter, saturn, uranus, neptune, currentobject
currentobject.visible = True
obj = m.selected
if obj == "Sonne":
currentobject = sun
elif obj == "Merkur":
currentobject = mercury
elif obj == "Venus":
currentobject = venus
elif obj == "Erde":
currentobject = earth
elif obj == "Mars":
currentobject = mars
elif obj == "Jupiter":
currentobject = jupiter
elif obj == "Saturn":
currentobject = saturn
elif obj == "Uranus":
currentobject = uranus
elif obj == "Neptun":
currentobject = neptune
currentobject.visible=True
menu(choices=['Sonne', 'Merkur', 'Venus', 'Erde', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptun'], bind=M)
scene.append_to_caption('\n\n')
scene.append_to_caption("Change mass of chosen object: \n\n")
def setmass(b):
wt.text = '{:1.1f}'.format(b.value)
sl = slider(min=1, max=10, value=1, length=1000, bind=setmass)
wt = wtext(text='{:1.1f}'.format(sl.value))
scene.append_to_caption('\n\n')
while (True):
rate(100)
if running:
if currentobject = sun:
sun.mass = (1.989e30)*sl.value
elif currentobject = mercury:
mercury.mass = (3.285e23)*sl.value
elif currentobject = venus:
venus.mass = (4.869e24)*sl.value
elif currentobject = earth:
earth.mass = (5.974e24)*sl.value
elif currentobject = mars:
mars.mass = (6.4185e23)*sl.value
elif currentobject = jupiter:
jupiter.mass = (1.8987e27)*sl.value
elif currentobject = saturn:
saturn.mass = (5.683e26)*sl.value
elif currentobject = uranus:
uranus.mass = (8.683e25)*sl.value
elif currentobject = neptune:
neptune.mass = (1.0241e26)*sl.value当程序运行时,不会出现错误消息。然而,我们发现,虽然currentobject在函数M中被更改了,但它在之后并没有更改。(当您在"def M(m)“中插入"print (currentobject.mass)”时,所选对象的质量将出现在模拟中,但当您在函数之后插入它时,将显示太阳的质量)。这意味着计算始终使用太阳作为其当前对象,而不是使用菜单选择的对象。
发布于 2019-09-30 05:50:03
您创建的唯一3D对象是"sun“。当您在M()中说currentobject = mercury时,您已经将currentobject设置为"undefined“,因为没有名为"mercury”的3D对象。
https://stackoverflow.com/questions/58076380
复制相似问题