Мне нужно, чтобы projet получал цвет от значения. Я объясняю, у меня есть данные, и каждая информация должна быть представлена цветом.
Красный цвет для максимума, а синий для минимума и зеленый – для среднего значения. Это своего рода тепловая карта.
Итак, мне нужно, чтобы функция возвращала правильный цвет.
Я попробовал что-то вроде этого:
function datatocolor($min, $max, $value) { $half = (($min + $max) / 2); if ($value > $half) { $r = (255 * ($value+$min-$half)) / $half; $g = 255 - $r; $b = 0; } else { $b = (255 * ($half-$value+$min)) / $half; $g = 255 - $b; $r = 0; } $color = array(intval($r), intval($g), intval($b)); return $color; }
Но я краснею и синюю, и никогда не зеленую … Я пробовал много операций, я должен быть глупым, но я не нашел правильной операции … Спасибо заранее за вашу помощь!
Я не эксперт по php, но насколько я могу судить, проблема не в этом блоке кода. Я проверял ваш алгоритм в java, чтобы быть уверенным, и это выглядит правильно:
public static void main(String[] args) { int min = 0; int max = 10; int half = (min + max) / 2; int r, g, b; // Cycling through the values for completeness' sake. for (int value = 0; value <= 10; value++) { if (value > half) { r = (255 * (value + min - half)) / half; g = 255 - r; b = 0; } else { b = (255 * (half - value + min)) / half; g = 255 - b; r = 0; } System.out.println("Value: " + value + " - " + new Color(r, g, b)); }
Результатом этого является то, что вы ожидаете – чистый синий минимум, чистый зеленый в середине и чистый красный максимум:
Value: 0 - java.awt.Color[r=0,g=0,b=255] Value: 1 - java.awt.Color[r=0,g=51,b=204] Value: 2 - java.awt.Color[r=0,g=102,b=153] Value: 3 - java.awt.Color[r=0,g=153,b=102] Value: 4 - java.awt.Color[r=0,g=204,b=51] Value: 5 - java.awt.Color[r=0,g=255,b=0] Value: 6 - java.awt.Color[r=51,g=204,b=0] Value: 7 - java.awt.Color[r=102,g=153,b=0] Value: 8 - java.awt.Color[r=153,g=102,b=0] Value: 9 - java.awt.Color[r=204,g=51,b=0] Value: 10 - java.awt.Color[r=255,g=0,b=0]
Основываясь на том, что вы предоставили, проблема кажется либо в том, как вы вызываете функцию, либо в том, как вы используете возвращаемый массив.