1

这是我的代码。

from visual import *
s=[]
n=20
num_lines = sum(1 for line in open('G:\Dropbox\Programming\Fortran\Source\Assign2\pos_x.dat'))
loop=num_lines/n
f=open('G:\Dropbox\Programming\Fortran\Source\Assign2\pos_x.dat','r')
box(pos=[10,10,10],length=20,width=20,height=20,opacity=0.3,color=color.white)
for i in range(0,n-1):
    line=f.readline()
    row = line.split()
    x = float(row[0])
    y = float(row[1])
    z = float(row[2])
    s.append(sphere(pos=[x,y,z],radius=1,color=color.cyan))
for i in range(1,loop-1):
    rate(100)
    for j in range(0,n-1):
        line=f.readline()
        row = line.split()
        x = float(row[0])
        y = float(row[1])
        z = float(row[2])
        s[j].pos = [x,y,z]

一些球体(不是所有球体)在显示屏上移动时会闪烁。如何减少闪烁?这是pos_x.dat

4

1 回答 1

0

我用你提供的数据测试了你的代码,你的问题在于对range函数的误解。

您的问题是,在 Python 中,您作为第二个参数提供的上限range不包括在结果范围内(即range(1,4)返回[1,2,3])。

您的数据格式为,每块 20 行是一帧中 20 个球体的位置。如果你这样做for j in range(0,n-1):for j in range(0, 19):那么你只迭代 19 个数据点(索引 0 到 18)而不是每帧需要的 20 个,这会导致闪烁,因为在下一帧你想用于你的第一个数据sphere 实际上是您在最后一帧中忘记的最后一个球体的数据。

解决方案是-1从对函数的所有调用的第二个参数中删除range。例如换行

for i in range(0,n-1):

for i in range(0, n):

等等。

于 2015-05-22T06:31:31.677 回答