Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zamiana liczby na kolor
Forum PHP.pl > Forum > Przedszkole
TomASS
Witajcie,

Potrzebuję zrobić funkcję:

  1. function getColor($min, $max, $value){
  2. ....
  3. }


która to zwróci mi kolor (do użycia w CSS) ze "skali" od czerwonego (dla wartości mniejszej/równej $min), przez żółty (dla wartości środkowej) aż do zielonego (dla wartości większej/równej $max).

coś na wzór:


Czy ktoś wie jak uzyskać kolor z tej skali w sposób "ciągły"?
SmokAnalog
Ten problem to czysta matematyka. Możesz poszukać gotowej funkcji, a jeśli masz ochotę zrobić swoją, to masz pole do popisu. Idealnie byłoby, gdyby funkcja przyjmowała dowolną liczbę kolorów w gradiencie. Idealnie byłoby zrobić to obiektowo, żeby wywoływane było to np. tak:
  1. $gradient = new Gradient();
  2. $gradient->addColor(new Color(0, 255, 0), 0);
  3. $gradient->addColor(new Color(255, 255, 0), 0.5);
  4. $gradient->addColor(new Color(255, 0, 0), 1);
  5. var_dump($gradient->getColor(0.25)); // zwróciłoby obiekt klasy Color będący kolorem pośrednim między zielonym a żółtym

Można to też uprościć (chociaż już nie będzie tak elegancko) i stworzyć po prostu funkcję. Jeśli miałaby mieć tę samą funkcjonalność, musiałaby przyjmować kolory w tablicy lub jako zmienną liczbę parametrów, a pierwszym (lub ostatnim) parametrem byłaby pozycja pożądanego koloru (najlepiej w skali <0;1>). Wtedy do ustalenia byłby sposób podawania i zwracania kolorów, np. tablica array('r' => ..., 'g' => ..., 'b' => ...) lub szesnastkowo.
TomASS
Dzięki, ale problem w tym, że pomiędzy czerwonym (255;0;0)
a zielonym (0;255;0)
wcale nie jest żółty (255;255;0)

a jakiś sraczkowty (127;127;0)

wink.gif
SmokAnalog
A na czym polega problem, że to nie żółty kolor? tongue.gif Cały myk polega na tym, żeby proporcjonalnie obliczyć składowe koloru. Musisz obliczyć pozycję koloru względem dwóch kolorów, czyli dla 0.25 będzie to 0.5, bo leży dokładnie na środku przedziału zielony-sraczkowaty. Potem musisz wyliczyć poszczególne składowe korzystając z tej pozycji. Dla 0.5 będzie to dokładnie kolor między jednym a drugim, czyli w przypadku zieleń-sraczkowaty będzie to:
Kod
Zielony:     rgb(0,   255, 0)
Sraczkowaty: rgb(127, 127, 0)
Wynik:
R: (0 + 127) * 0.5 = 63,5
G: (255 + 127) * 0.5 = 191
B: (0 + 0) * 0.5 = 0


Załóżmy, że zaokrąglamy "normalnie".

Czyli naszym kolorem wyjściowym będzie:
Kod
rgb(64, 191, 0)
TomASS
Ja chcę aby żołty był w połowie pomiędzy czerowny i zielonym.
SmokAnalog
sciana.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.