2013-08-21 6 views
0

У меня есть ошибка где-то в этом скрипте, который должен генерировать градиент. Когда глубина равна разности, градиент является совершенным, но приращения с плавающей запятой, похоже, прикручивают его. Я так долго смотрел на этот код, я не вижу ответа.Ошибка при генерации градиента

Что не так с этим кодом?

def interpolate(s, e, n): 

start = list(s) 
end = list(e) 
incrementlst = [] 

for i in range(0,len(start)): 
    diff = int(end[i]) - int(start[i]) 
    if diff == 0: 
     increment = 0.0 
    else: 
     increment =diff/n 


    incrementlst.append(increment) 

return incrementlst 

def incrementedValue(s, i, n): 

    start = list(s) 
    increment = list(i) 
    n = n-1 
    finallst = [0,0,0,0] 
    if n < 1: 
     return start 

    for i in range(0,len(start)): 
     finallst[i] = start[i] + (n*(increment[i])) 


    return finallst 

def formatIncrementedValue(l): 

    cmykList = list(l) 

    formattedString = str(int(round(cmykList[0], 0))) + " " + str(int(round(cmykList[1], 0))) + " " + str(int(round(cmykList[2], 0))) + " " + str(int(round(cmykList[3], 0))) 
    return formattedString 

# Get user inputs. 
depth = int(ca_getcustomvalue ("depth", "0")) 
start = ca_getcustomvalue("start", "0") 
end = ca_getcustomvalue("end", "0") 

startlst = start.split(" ") 
startlst = [int(i) for i in startlst] 
endlst = end.split(" ") 
endlst = [int(i) for i in endlst] 

# draw a line and incrementally change the pen colour towards the end colour 
colorlst = interpolate(startlst, endlst, depth) 
for i in range(1,depth-1): 
    color = formatIncrementedValue(incrementedValue(startlst, colorlst, i)) 

    #Draw line at correct offset in colour "color" 
+0

Не могли бы вы предоставить значения для '' depth', start' и 'end', которые демонстрируют проблему? Когда вы говорите, что «приращения« плавающей точки », похоже, ввертывают его вверх», вы имеете в виду «появляется сообщение об ошибке» или «он работает, но результаты не выглядят так, как я ожидаю»? Отправьте сообщение об ошибке и/или изображение с результатом. – Kevin

+0

Ваш отступ испорчен. Все строки «интерполяции» находятся на неправильном уровне отступов. –

ответ

2

Это:

increment =diff/n 

делает целочисленное деление, так, например, если diff является 3 и n 2, то вы получите 1, а не 1.5.

Сделать выражение с плавающей точкой, чтобы исправить это:

increment = float(diff)/n 
+0

Но обратите внимание, что это, конечно, верно только в pre-3.0 Python. В 3.0+ оператор/выполняет «истинное» деление и // выполняет целочисленное деление. –

+0

Это, похоже, не имеет никакого эффекта. –

Смежные вопросы