【问题标题】:How do I reduce flicker in vpython?如何减少 vpython 中的闪烁?
【发布时间】:2015-05-22 05:59:08
【问题描述】:

这是我的代码。

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

【问题讨论】:

    标签: python python-2.7 flicker vpython


    【解决方案1】:

    我用你提供的数据测试了你的代码,你的问题在于对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 个,这会导致闪烁,因为在下一帧您将喜欢用于您的第一个球体实际上是您在最后一帧中忘记的最后一个球体的数据。

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

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

    for i in range(0, n):
    

    等等。

    【讨论】:

    • 您可能已经注意到,所有 20 个球体的位置不会同时更新。有什么办法吗?
    猜你喜欢
    • 2011-05-01
    • 1970-01-01
    • 2011-03-27
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多