Значения шкалы должны быть <= 255? - PullRequest
12 голосов
/ 11 октября 2009

У меня есть ячейки, числовое значение которых может быть любым от 0 до Integer.MAX_VALUE. Я хотел бы раскрасить эти ячейки соответственно.

Если значение = 0, то r = 0. Если значение Integer.MAX_VALUE, то r = 255. Но как насчет значений между ними?

Я думаю, мне нужна функция, предел которой как x => Integer.MAX_VALUE равен 255. Что это за функция? Или есть лучший способ сделать это?

Я мог бы просто сделать (value / (Integer.MAX_VALUE / 255)), но это приведет к тому, что многие низкие значения будут равны нулю. Так что, возможно, я должен сделать это с помощью функции журнала.

Большинство моих значений будет в диапазоне [0, 10000]. Поэтому я хочу выделить различия там.

Ответы [ 13 ]

0 голосов
/ 11 октября 2009

Если вы жалуетесь на то, что младшие числа становятся равными нулю, вам может потребоваться нормализовать значения до 255, а не весь диапазон значений.

Формула станет:

currentValue / (максимальное значение из набора)

0 голосов
/ 11 октября 2009

Лучший ответ действительно зависит от поведения, которое вы хотите.

Если вы хотите, чтобы каждая ячейка просто имела цвет, отличающийся от цвета соседа, используйте то, что akf сказано во втором абзаце, и используйте модуль (x% 256).

Если вы хотите, чтобы цвет имел какое-то отношение к фактическому значению (например, «синий цвет означает меньшие значения» вплоть до «красный цвет означает огромные значения»), вам придется опубликовать что-то об ожидаемом распределении значений. Поскольку вы беспокоитесь о том, что многие низкие значения равны нулю, я могу предположить, что у вас их много, но это только предположение.

В этом втором сценарии вы действительно хотите распределить ваши вероятные ответы на 256 «процентилей» и назначить цвет каждому (где равное количество вероятных ответов попадает в каждый процентиль).

0 голосов
/ 11 октября 2009

Я мог бы просто сделать (значение / (Integer.MAX_VALUE / 255)), но это приведет к тому, что многие низкие значения будут равны нулю.

Один из подходов, который вы можете использовать, это использовать оператор по модулю (r = value%256;). Хотя это не гарантирует, что Integer.MAX_VALUE получится как 255, это будет гарантировать число от 0 до 255. Это также позволит распределить низкие числа в диапазоне 0-255.

EDIT:

Как ни странно, когда я проверяю это, Integer.MAX_VALUE % 256 приводит к 255 (я изначально ошибочно проверил против %255, что дало неправильные результаты). Это кажется довольно простым решением.

...