0

我是 python 中 Visual 模块的新手,不太了解它是如何为对象赋值的。说

from visual import *
stars=[]
galaxies=[]    
for i in range(10):
   stars+=[sphere('pos,radius,color.....')]
for j in range(20):
   galaxies+=[sphere('pos,radius,color......')]
for k in range(30):
   stars[k].pos=position[k] 
   galaxies[k].pos=G_position[k]

我只是无法理解,通常,当 python 读取此代码时,列表将在 for 循环后完全完成,但在导入视觉模块后,这些球体可以显示在屏幕上并通过最后一个 for 循环的每次迭代更新它们的位置!...

或者我的问题也可能链接到视觉模块中的“show()”、“打印”“开始动画”语句的内容和位置以及它是如何工作的?我该如何使用它?

有点像我在 for 循环中或完成后添加打印状态。

非常感谢提前

4

1 回答 1

1

第一件事。您的代码使用列表连接将内容添加到列表中。最好使用.append()列表的方法。此外,最后一个循环可以直接迭代对象而不是使用索引。这种方式更优雅,更容易理解。

下面的伪代码与您的等效,但应用了上述更正:

from visual import *
stars = []
galaxies = []    
for i in  range(10):
   stars.append(sphere(...))
for j in range(20):
   galaxies.append(sphere(...))
for star, galaxy, starpos, galaxypos in zip(stars, galaxies, 
                                            position, G_position):
   star.pos = starpos
   galaxy.pos = galaxypos

有了这个,我可以解释视觉是如何工作的。

一旦对象发生变化,视觉模块就会更新屏幕。动画是通过这种改变实时完成的,不需要一个show()start_animation()- 它会随着它的发生而发生。可以在 python 命令行上运行的示例:

>>> from visual import sphere
>>> s = sphere()

那条线创建了一个球体和一个窗口,并且已经在窗口中显示了球体!!!

>>> s.x = -100

该线将x轴上的球体位置更改为-100。更改立即在屏幕上发生。就在这条线运行之后,您会看到球体出现在窗口的左侧。

所以动画是通过改变对象的值来实现的。

于 2010-01-05T14:00:35.487 回答