Estoy escribiendo un juego Java y quiero implementar un medidor de potencia para determinar qué tan duro vas a disparar algo.
Necesito escribir una función que tome un int entre 0 y 100, y en función de qué tan alto sea ese número, devolverá un color entre Verde (0 en la escala de potencia) y Rojo (100 en la escala de potencia).
Similar a cómo funcionan los controles de volumen:
¿Qué operación debo hacer en los componentes Rojo, Verde y Azul de un color para generar los colores entre Verde y Rojo?
Entonces, podría ejecutar say, getColor(80)
y devolverá un color anaranjado (sus valores en R, G, B) o getColor(10)
que devolverá un valor RGB más verde / amarillo.
Sé que necesito aumentar los componentes de los valores R, G, B para un nuevo color, pero no sé específicamente qué sube o baja a medida que los colores cambian de Verde a Rojo.
Progreso:
Terminé usando el espacio de color HSV / HSB porque me gustaba más el gradiant (no hay marrones oscuros en el medio).
La función que utilicé fue:
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);
}
Donde "potencia" es un número entre 0.0 y 1.0. 0.0 devolverá un rojo brillante, 1.0 devolverá un verde brillante.
Java Hue Chart: