Я пишу Java-игру и хочу внедрить измеритель мощности для того, как сильно вы собираетесь что-то снимать.
Мне нужно написать функцию, которая принимает значение от 0 до 100, и в зависимости от того, насколько высоко это число, оно будет возвращать цвет между зеленым (0 на шкале мощности) и красным (100 на шкале мощности).
Аналогично тому, как работают регуляторы громкости:
Какую операцию нужно выполнить для красного, зеленого и синего компонентов цвета, чтобы создать цвета между зеленым и красным?
Таким образом, я могу выполнить 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);
}
Где «сила» - это число от 0,0 до 1,0. 0.0 вернет ярко-красный, 1.0 вернет ярко-зеленый.
Java Hue Chart: