我处理的数据描述了一个包含许多部分的过程的进度。每个部分都有许多里程碑。各部分不相等,但给出了比率。 我想产生一个动画线图作为最终结果。 过程的每一部分都有几个里程碑。我需要计算当前完成,作为一个百分比,为每个部分在许多不同的时间。不同的时间对应于动画的“帧”。你知道吗
具有三个里程碑的示例数据:
Task1, 22 , 24.5 , 27.6
Task1, 30% , 35% , 35%
Frames 0-21 : y = 0
Frame 22: y = 30%
Frame 23: y = 30% + 35% *(23-22/24.5-22)
Frame 24: y = 30% + 35% *(24-22/24.5-22)
Frame 25: y = 30% + 35% + (25-24.4/27.6-24-5)
Frame 26: y = 30% + 35% + (26-24.4/27.6-24-5)
Frame 27: y = 30% + 35% + (27-24.4/27.6-24-5)
Frame 28+ y = 30% + 35% + 35%
这是假设在到达第一个里程碑之前,子任务上没有任何工作发生。你知道吗
我想在python中创建一个函数,它接受task和ratio作为一个列表,以及一个最大帧数,并为每个帧返回一个值列表。 这是我到目前为止所尝试的,这是不正确的。你知道吗
from math import floor, ceil
from itertools import chain
data = [[1,2.5,4.5,7],[4,6,9,11],[0,0,9,11],[1,1,1,9]]
ratios = [[25,20,20,35],[30,30,30,10],[0,0,50,50],[10,10,15,65]]
frame_count = int(ceil(max(chain.from_iterable(data))+1))
print "frame count is ", frame_count
frame_times = range(0,frame_count)
print "frame_times are " , frame_times
frames = []
for r, part in enumerate(data):
ratio = ratios[r]
y_list = []
print "part is ", part
print "ratios are ", ratio
for i in range(len(part)-1):
Tlast = part[i]
Tnext = part[i+1]
Rlast = ratio[i]
for frame in frame_times:
print "frame : %r, Tlast: %r , Tnext: %r" %(frame, Tlast,Tnext)
if frame == 0 or (frame < Tlast and max(y_list) == 0):
y_list.append(0)
print "%r appended" %(y_list[-1])
continue
elif frame == Tlast :
y_list.append(y_list[-1] + ratio[i])
print "%r appended" %(y_list[-1])
continue
elif Tlast < frame and frame < Tnext:
y_list.append(y_list[-1] + ratio[i] * ((frame-Tlast)/(Tnext-Tlast)))
print "%r appended" %(y_list[-1])
continue
else :
print "Problem occured no value found for frame."
print "y_list is ", y_list
exit()
frames.append(y_list)
print "Data points are"
print data
print "ratios are ", ratio
print ratio
print "y_list is ", y_list
非常感谢您对如何纠正这一点和改进方法的任何建议。你知道吗
我想知道是否最好将帧作为中间循环,将数据点作为内部循环。我不知道如何在两个循环不相互独立的情况下编写代码。像这样:
loop through the frames:
while frame < Tlast :
y_list.append(calculate y)
increment frame
increment Tlast
increment Tnext
while Tlast < frame < Tnext :
y_list.append(calculate y)
increment frame
increment Tlast
increment Tnext
while frame > Tnext :
y_list.append(calculate y)
increment Tnext
check whether to increment frame and continue
目前没有回答
相关问题 更多 >
编程相关推荐