c++ - 如何按值在两个 vector 之间淡入淡出?

标签 c++ vector arduino

我在研究如何在两个颜色 vector 之间淡入淡出时遇到问题。

两种颜色:

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 是绿色。

最佳答案

首先,我想如果你定义一个浮点 vector 来定义颜色,我猜它的限制在 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<= 灵敏度 <= 1

现在,您可以将渐变应用于您的颜色:

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

当然,假设 vector 类可以完成这些基本操作

附言如果灵敏度为 1,您只会得到完全淡入淡出,我想这对于这个等式来说不是必需的。

关于c++ - 如何按值在两个 vector 之间淡入淡出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20482642/

相关文章:

c++ - 无法在动态链接库中找到过程入口点 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev

c++ - 'int' 之前的预期不合格 ID? Arduino库

c++ - 在共享库中全局声明的非 POD 对象的语义是什么?

c++ - 模板类可以在 C++ 中具有静态成员吗

c++ - 最佳实践 : Frequent usage of big temporal buffer within function (C++)

c++ - 你能在 C++ 中嵌入 for 循环吗?

c++ - 使用简单的构造函数在 C++ 中使用 Vectors 和自定义类的问题

指向 vector 元素的 C++ 指针,元素已删除

python - 使用 pySerial 等待 Arduino 自动重置

c - 结合使用 Arduino Motor Shield 和 Bluetooth Shield