Piszę grę Java i chcę zaimplementować miernik mocy określający, jak mocno zamierzasz coś zrobić.
Muszę napisać funkcję, która przyjmuje wartość między 0-100 i na podstawie tego, jak wysoka jest ta liczba, zwróci kolor między zielonym (0 na skali potęgi) a czerwonym (100 na skali potęgi).
Podobnie jak w przypadku regulacji głośności:
Jaką operację muszę wykonać na składnikach czerwonego, zielonego i niebieskiego koloru, aby wygenerować kolory między zielonym i czerwonym?
Mogę więc uruchomić, powiedzmy, getColor(80)
i zwróci pomarańczowy kolor (jego wartości w R, G, B) lub getColor(10)
który zwróci bardziej zielono / żółtą wartość RGB.
Wiem, że muszę zwiększyć składowe wartości R, G, B dla nowego koloru, ale nie wiem konkretnie, co rośnie lub spada, gdy kolory zmieniają się z zielono-czerwony.
Postęp:
Skończyło się na tym, że użyłem przestrzeni kolorów HSV / HSB, ponieważ bardziej podobał mi się gradient (brak ciemnych brązów w środku).
Funkcja, której użyłem, to:
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);
}
Gdzie „moc” to liczba z przedziału od 0,0 do 1,0. 0.0 zwróci jasnoczerwony, 1.0 zwróci jasnozielony.
Wykres odcieni Java: