Javascript 插值RGB颜色

Javascript 插值RGB颜色,javascript,html,canvas,Javascript,Html,Canvas,在给定start\u time和end\u time,start\u color和end\u color的情况下,我正在绞尽脑汁研究如何插值颜色。为简单起见,下面是一个示例,说明我如何考虑仅使用红色组件: start_time = 0 end_time = 1 start_color = F //base 16 ftw end_color = 0 我能看到当时的情况。5,red\u out应该是8。这将是从鲜红色到黑色褪色的中间过程 那么这是不是经过的时间*start\u color?但是如果

在给定
start\u time
end\u time
start\u color
end\u color
的情况下,我正在绞尽脑汁研究如何插值颜色。为简单起见,下面是一个示例,说明我如何考虑仅使用红色组件:

start_time = 0
end_time = 1
start_color = F //base 16 ftw
end_color = 0
我能看到当时的情况。5,
red\u out
应该是8。这将是从鲜红色到黑色褪色的中间过程


那么这是不是
经过的时间*start\u color
?但是如果它以另一种方式褪色,从黑色变为鲜红色呢?这就是我感到困惑的地方。

对于每个颜色成分,必须使用以下公式(没有什么神奇之处):


对于每个颜色组件,必须使用以下公式(没有什么神奇之处):


另一种方法似乎很简单,如果您认为在时间
t
(其中t的范围为0到1),则通道的值为:

start + t * (end - start)
这样,如果结束值小于开始值(如红色->黑色),则
end-start
子句为负值,因此随着时间的增加,值会根据需要减少

还可以看到,在边缘情况下

t = 0   =>   start + 0 = start
t = 1   =>   start + (end - start) = end
根据需要


编辑:这种表示法的优点在于它清楚地说明了如何修改衰减率。只要
t
的值从0开始并最终达到1,它就不必进行线性修改。例如,如果希望插值开始缓慢并加速到终点,则可以使用t2。另一种方法似乎很简单,如果您认为在时间
t
(其中t的范围为0到1),则通道的值为:

start + t * (end - start)
这样,如果结束值小于开始值(如红色->黑色),则
end-start
子句为负值,因此随着时间的增加,值会根据需要减少

还可以看到,在边缘情况下

t = 0   =>   start + 0 = start
t = 1   =>   start + (end - start) = end
根据需要


编辑:这种表示法的优点在于它清楚地说明了如何修改衰减率。只要
t
的值从0开始并最终达到1,它就不必进行线性修改。例如,如果您希望插值开始缓慢,最后加速,您可以使用t2来代替。

好东西,谢谢。var red_out=time_alive*(pArray[i].pEndColorRed-pArray[i].pStartColorRed)/(now-pArray[i].pStarttime).toString(16);这是我写过的最难看的代码行lol

var red_out=(Math.abs(parseInt((time_live*)(pArray[i].pendcorred-pArray[i].pstartcorred)/(pArray[i].pLifespan()))。toString(16);好东西,泰。var red_out=time_alive*(pArray[i].pEndColorRed-pArray[i].pStartColorRed)/(now-pArray[i].pStarttime).toString(16);这是我写过的最难看的代码行lol

var red_out=(Math.abs(parseInt((time_live*)(pArray[i].pendcorred-pArray[i].pstartcorred)/(pArray[i].pLifespan()))。toString(16);