如何按值在两个向量之间淡入淡出?

时间:2013-12-09 22:58:57

标签: c++ vector arduino

我在解决如何在两个颜色向量之间淡入淡出时遇到问题。

两种颜色:

Tinker::Vect3d<float> startCol(255,0,0);
Tinker::Vect3d<float> endCol(0,0,255);

我也有0-100“t1”的传入值。

我的一个尝试:

for(int i=0;i<nLEDs;i++){

    const float fade   = (255 / 100) * (t1 * sensitivity);

    Tinker::Vect3d<float> finalColour(startCol*a + endCol*(1-a));  

    FTLEDColour col = { finalColour[0] , finalColour[1] , finalColour[2] };
}

以连续循环运行。我试图从红色开始,并根据输入值面对绿色,因此0为红色,100为绿色。

1 个答案:

答案 0 :(得分:2)

首先,我想如果你定义一个浮动矢量来定义颜色,我猜它的限制在0 .. 1之间,而不是0 .. 255.即:

Tinker::Vect3d<float> startCol(1.0,0,0);
Tinker::Vect3d<float> endCol(0,0,1.0);

对于你的淡入淡出因子,你可以这样做:

const float fade   = (t1 * sensitivity)/100;

考虑到t1在0..100之间变化,灵敏度为0 <=灵敏度&lt; = 1

现在,您可以将淡入淡出应用于您的颜色:

Tinker::Vect3d<float> finalColour(startCol*(1-fade) + endCol*(fade)); 

当然,假设矢量类可以执行此基本操作

P.S。如果灵敏度为1,你只会得到一个完整的淡入淡出,我想这个等式是没有必要的。