2013-12-09 2 views
1

У меня возникли проблемы с разработкой того, как исчезать между двумя цветовыми векторами.Как затухать между двумя векторами по значению?

Два цвета:

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

У меня также есть входное значение от 0-100 "t1".

И один из моих Trys:

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

Умножение на '255/100' неверно, если ваше входное значение равно 0..100, и вы хотите масштабировать до 0..1 вам нужно разделить на 100. –

+0

Я считаю, что затухание цвета улучшается с использованием другого цвета чем RGB. - http://stackoverflow.com/a/20469911/106092 –

+0

Если кто-то хочет использовать библиотеку Tinker, вы можете найти ее на git hub https://github.com/Nicola17/ArduinoTinkerLibrary –

ответ

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 является varing между 0..100 и чувствительностью 0 < = чувствительность < = 1

Теперь вы можете заявл у вашего увядают к вашему цвету как:

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

при условии, конечно, что вектор класс может сделать это основные операции,

P.S. вы получите только полное исчезновение, если чувствительность равна 1, что, я думаю, не обязательно для этого уравнения.

Смежные вопросы