Получить значение цвета из числовых значений - PullRequest
3 голосов
/ 21 июля 2011

Мне нужен проект, чтобы получить цвет из значения. Я объясняю, у меня есть данные, и каждый данные должны быть представлены цветом.

Красный цвет - для максимума, синий - для минимума, а зеленый - для среднего значения. Этакая тепловая карта.

Итак, мне нужна функция, возвращающая правильный цвет.

Я пробовал что-то вроде этого:

    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;
    }

Но я получаю красный и синий, а не зеленый ... Я пробовал много операций, я должен быть глуп, но не могу найти правильную операцию ... Заранее спасибо за помощь!

1 Ответ

2 голосов
/ 21 июля 2011

Я не эксперт по 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]

Судя по тому, что вы предоставили, проблема, похоже, заключается в том, как вы вызываете функцию, или в способе, которым вы используя массив, который он возвращает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...