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);这是我写过的最难看的代码行lolvar 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);