Я пишу Java-игру и хочу реализовать измеритель мощности, показывающий, как сильно вы собираетесь что-то снимать.
Мне нужно написать функцию, которая принимает целое число от 0 до 100 и, основываясь на том, как высоко это число, возвращает цвет между зеленым (0 на шкале мощности) и красным (100 на шкале мощности) .
Аналогично тому, как работают регуляторы громкости:
![volume control](https://i.stack.imgur.com/uErDJ.png)
Какую операцию нужно выполнить для красного, зеленого и синего компонентов цвета, чтобы создать цвета между зеленым и красным?
Итак, я мог бы выполнить, скажем, getColor(80)
, и он вернет оранжевый цвет (его значения в R, G, B) или getColor(10)
, который вернет более зеленый / желтый RGB-значение.
Я знаю, что мне нужно увеличить компоненты значений R, G, B для нового цвета, но я не знаю точно, что повышается или понижается по мере того, как цвета переходят от зелено-красного.
Прогресс:
В итоге я использовал цветовое пространство HSV / HSB, потому что мне больше понравился градиент (в центре нет темных коричневых оттенков).
Я использовал следующую функцию:
public Color getColor(double power)
{
double H = power * 0.4; // Hue (note 0.4 = Green, see huge chart below)
double S = 0.9; // Saturation
double B = 0.9; // Brightness
return Color.getHSBColor((float)H, (float)S, (float)B);
}
Где «power» - это число от 0,0 до 1,0. 0.0 вернет ярко-красный, 1.0 вернет ярко-зеленый.
Диаграмма оттенка Java:
![Java Hue Chart](https://i.stack.imgur.com/QphuU.png)