"без потерь" с плавающей точкой в ​​BYTE преобразование - PullRequest
1 голос
/ 11 февраля 2012

Я использую libnoise для генерации шума Перлина на сетке ландшафта 1024x1024. Я хочу преобразовать вывод с плавающей запятой в BYTE между 0 и 255. В конечном итоге вопрос математический: как я могу преобразовать значение в реальном интервале (-1,1) в целое (0,255), минимизируя потеря

Ответы [ 2 ]

5 голосов
/ 11 февраля 2012

Эта формула даст вам число в [0, 255], если ваш диапазон ввода исключает конечные точки:

(int)((x + 1.0) * (256.0 / 2.0))

Если вы включаете конечные точки (а затем обычно пишется [-1,1], а не (-1,1)), вам понадобится специальный случай для x == 1.0, чтобы округлить его до 255.

0 голосов
/ 11 февраля 2012

Лучший способ может зависеть от распределения поплавков в (-1,1); если в некоторых областях их больше, а в некоторых меньше, вы можете увеличить «точность» в первых за счет последних. По сути, если у вас есть функция вероятности для выходных данных, определенных на этом интервале, вы можете разделить (0,1) - интервал значений вероятности - на 256 равных подинтервалов, и для каждого данного числа с плавающей точкой вы рассчитываете, на какой подинтервал его значение функции вероятности падает. Для шума функция вероятности (или, по крайней мере, должна быть) близка к линейной, так что, возможно, ответ Марка Байерса - это путь.

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