sorry für die Thread-Exhumierung,
mir ist eben ein Einfall über den Weg gelaufen und hab glatt ne Temperatur -> RGB Farbwert-Funktion draus gemacht.
:eek: NOCH EINE?!?
ja, ich spiele gern :D. Weiterhin haben mir die Farbspektren der bereits im Forum vorgestellten Lösungen nicht gefallen. Gedacht habe ich die Funktion für eine HTML-Heatmap-Darstellung von Temperatur-Meßwerten. Allerdings hab ich noch keine Idee, wo ich das einsetzen kann
Features:
[ul]
[li]Farb-Auflösung 0,1K[/li][li]sehr großer Farbraum, dynamisch nach übergebener Tmin und Tmax[/li][li]unterer Farbraum auf Magenta begrenzt, in der Funktion anpassbar[/li][li]Rückgabewert ist ein HTML-fähiger RGB-String "rgb(255,255,255)[/li][/ul]
Live-Beispiel (wird täglich aktualisiert):
http://www.raketenschnecke.net/HighCharts/Data/Temperatur_Matrix_365_24778.htm
Funktion:
function getRGBColor($Tmax, $Tmin, $Tvalue)
{
/*
Funktion rechnet Temperaturwerte in RGB-Farbwerte um. Übergabeparameter sind Maximal-Temperatur, Minimal-Temperatur und Temperaturwert,
dessen Farbwert berechnet werden soll. Das Farbband reicht von Rot (max. Temperatur) bis Violett (min Temperatur). Der untere Temperaturbereich geht
theoretisch auch bis Rot, ist aber auf Magenta begrenzt ($Blauanteil_min).
Wertebereich Beispiel (ohne Farbbegrenzung für Tmin): Wertebereich 0-100°C, aufgeteilt in 6 Teilbereiche
1. Teilbereich
0- 16,6°C (R=255, G=0, B=130) - (R=255, G=0, B=255)
2. Teilbereich
16,7- 33,3°C (R=255, G=0, B=255) - (R=0, G=0, B=255)
3. Teilbereich
33,4- 50,0°C (R=0, G=0, B=255) - (R=0, G=255, B=255)
4. Teilbereich
50,1- 66,7°C (R=0, G=255, B=255) - (R=0, G=255, B=0)
5. Teilbereich
66,7- 83,3°C (R=0, G=255, B=0) - (R=255, G=255, B=0)
6. Teilbereich
83,3- 100,0°C (R=255, G=255, B=0) - (R=255, G=0, B=0)
*/
// Deklarationen
$Tvalue = round($Tvalue, 1);
$TOffset = $Tmin * -1;
$Blauanteil_min = 190; // Farbgrenze für Temperatur-Min, Blauanteil 190 => Magenta
$Tmax = $Tmax + $TOffset;
$Tvalue = $Tvalue + $TOffset;
$Tmin = $Tmin + $TOffset;
$teiler = ($Tmax - $Tmin)/6;
$BOffset = ($Blauanteil_min/255)*100;
$TeilerOffset = (($teiler*$BOffset)/100)/6;
// Teilbereiche / Farbwert berechnen
if($Tvalue <= ($teiler - ($TeilerOffset*6)))
{
// 1. Teilbereich, B berechnen
$Tvalue = $Tvalue - ($TeilerOffset*6);
$B = round(($Tvalue*($Blauanteil_min-255))/$teiler, 0) + $Blauanteil_min;
return 'rgb(255,0,'.$B.')';
}
elseif(($Tvalue > ($teiler - ($TeilerOffset*6))) && ($Tvalue <= (($teiler*2) - ($TeilerOffset*5))))
{
// 2. Teilbereich, R berechnen
$Tvalue = $Tvalue - ($teiler - ($TeilerOffset*6));
$R = 255 - round(($Tvalue*255)/$teiler, 0);
return 'rgb('.$R.',0,255)';
}
elseif(($Tvalue > ($teiler*2 - ($TeilerOffset*5))) && ($Tvalue <= ($teiler*3 - ($TeilerOffset*4))))
{
// 3. Teilbereich, G berechnen
$Tvalue = $Tvalue - ($teiler*2 - ($TeilerOffset*5));
$G = round(($Tvalue*255)/$teiler, 0);
return 'rgb(0,'.$G.',255)';
}
elseif(($Tvalue > ($teiler*3 - ($TeilerOffset*4))) && ($Tvalue <= ($teiler*4 - ($TeilerOffset*3))))
{
// 4. Teilbereich, B berechnen
$Tvalue = $Tvalue - ($teiler*3 - ($TeilerOffset*4));
$B = 255 - round(($Tvalue*255)/$teiler, 0);
return 'rgb(0,255,'.$B.')';
}
elseif(($Tvalue > ($teiler*4 - ($TeilerOffset*3))) && ($Tvalue <= ($teiler*5 - ($TeilerOffset*2))))
{
// 5. Teilbereich, R berechnen
$Tvalue = $Tvalue - ($teiler*4 - ($TeilerOffset*3));
$R = round(($Tvalue*255)/$teiler, 0);
return 'rgb('.$R.',255,0)';
}
elseif(($Tvalue > ($teiler*5 - ($TeilerOffset*2))) && ($Tvalue <= $teiler*6))
{
// 6. Teilbereich, G berechnen
$Tvalue = $Tvalue - ($teiler*5 - ($TeilerOffset*2));
$G = 255 - round(($Tvalue*255)/$teiler, 0);
return 'rgb(255,'.$G.',0)';
}
return false;
}