2016-01-08 38 views
0

之間產生顏色我有一個最低速度Color和最高速度Color兩個特定值

我叫currentSpeed另一個變量,給了我當前的速度。我想使用當前速度在兩個極端之間生成Color。任何提示?

+1

試試[線性插值(https://en.wikipedia.org/wiki/Linear_interpolation)的所有如果您想更準確的3 RGB值 –

+0

@KaiIskratsch:提高所有RGB值的2.2動力,插入*那些*,然後將它們提升到1/2.2的冪。 – immibis

+0

我的評論只是作爲一個非常簡單的解決方案,但從來沒有打算成爲一個完美的解決方案 –

回答

2

最簡單的解決方案可能是對每個RGB進行線性插值(因爲這可能是您的顏色所在的格式)。但它可能會導致一些奇怪的結果。如果lowest爲亮藍色(0x0000FF),highest爲亮黃色(0xFFFF00),則中途爲深灰色(0x808080)。

一個更好的解決方案可能是:

  • 轉換兩種顏色到HSL(色調,飽和度,亮度)
  • 線性插值這些組件
  • 轉換結果回RGB。

請參閱this answer瞭解如何進行HSL轉換和從HSL轉換。

要你會需要像線性插值:

double low_speed = 20.0, high_speed = 40.0; // The end points. 
int low_sat = 50, high_sat = 200;   // The value at the end points. 
double current_speed = 35; 

const auto scale_factor = (high_sat-low_sat)/(high_speed-low_speed); 
int result_sat = low_sat + scale_factor * (current_speed - low_speed); 

兩個問題:

  • 你需要小心整數四捨五入,如果速度實際上並不double
  • 當你來插補色調時,你需要知道它們被表示爲圓上的角度 - 所以你可以選擇是順時針插補還是逆時針插補(其中一個將通過360回到0) 。
+0

我假設你沒有問「我該怎麼做線性插值」? –

+0

當然,這使得關於提問者想要做什麼的假設成爲可能。 – immibis

+0

是的。我不認爲這是問題。 –