2013-12-09 21 views
1

我遇到了如何在兩個顏色矢量之間淡出的問題。如何通過值在兩個向量之間淡出?

這兩種顏色:

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

乘以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爲0..100和靈敏度之間varing爲0 < =靈敏度< = 1

現在,你可以申請Y在您的淡入淡出你的顏色爲:

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

假設,當然,Vector類可以做到這一點的基本操作

附:如果靈敏度爲1,那麼只會得到完全的淡入淡出效果,我認爲這個方程沒有必要。

相關問題