我在很长一段时间内创建了当前代码,其中我提供了开始和结束颜色以及步骤数。返回的是起始颜色和结束颜色之间的颜色表(数组)。
function getColorSteps(starting, ending, steps)
steps = tonumber(steps) or 1
local step = {
(ending[1] - starting[1]) / steps,
(ending[2] - starting[2]) / steps,
(ending[3] - starting[3]) / steps
}
local palette = {
[1] = { unpack(starting) },
[steps] = { unpack(ending) }
}
for i=2, steps-1 do
palette[i] = {
starting[1] + (step[1] * i),
starting[2] + (step[2] * i),
starting[3] + (step[3] * i)
}
end
print( "#palette = " .. #palette )
print( "steps = " .. steps )
for i = 1, #palette do
print(
i ..
". rgb(" ..
table.concat(palette[i], ", ")
.. ")"
)
end
return palette
end
我希望将此步骤转换为“进度”。见这个例子:
s,e = {255,255,255},{0,0,0}
getColorSteps(s,e,0)
> 255, 255, 255, 255
getColorSteps(s,e,0.5)
> 127.5, 127.5, 127.5, 127.5
getColorSteps(s,e,1)
> 0, 0, 0, 0
我只是不确定该怎么做......
答案 0 :(得分:2)
也许使用线性插值?
function getColorSteps(s, e, interp)
return {
(e[1]-s[1]) * interp + s[1],
(e[2]-s[2]) * interp + s[2],
(e[3]-s[3]) * interp + s[3],
(e[4]-s[4]) * interp + s[4]
}
end
然而,只有在每个相应的颜色值i
,e[i] > s[i]
中才有效。因此,您可能需要每次使用math.max(e[0], s[0]) - math.min(e[0], s[0])
或类似的东西。
而且,哦,我宁愿使用a
和b
代替开始/结束;但这可能只是我的偏好。