Подтвердить что ты не робот

Равномерное распределение от фрактальной функции шума Perlin в С#

Моя шумовая функция Perlin (которая добавляет 6 октав 3D-симплекса с постоянством 0,75) генерирует массив 2D-массива double s.

Эти числа кажутся нормированными на [-1, 1], со средним значением 0. Я зажимаю их, чтобы избежать исключений, которые, как я думаю, связаны с проблемами точности с плавающей запятой, но я уверен, что мой коэффициент масштабирования достаточно хорошо для ограничения выхода шума именно в эту окрестность в идеальном случае.

В любом случае, все подробности. Дело в том, что здесь имеется массив помех размером 256 на 256:

enter image description here

Гистограмма с нормальным положением выглядит так:

enter image description here

Matlab lillietest - это функция, которая применяет тест Lilliefors, чтобы определить, поступает ли набор чисел из нормального распределения. Мой результат был неоднократно, 1, что означает, что эти числа обычно не распределяются.

Мне нужна функция f(x) такая, что при применении к списку значений из моей шумовой функции результаты будут отображаться равномерно.

Я хотел бы, чтобы эта функция была реализована в С# и не выполняла минуты для запуска.

И снова не должно иметь значения, откуда берутся числа (речь идет о преобразовании одного распределения в другое, в частности, в обычном, в однообразном). Тем не менее, реализация моей шумовой функции основана на этом и this, Вы можете найти приведенный выше массив значений здесь.

4b9b3361

Ответ 1

Как ни странно, я написал статью по вашему самому вопросу:

http://ericlippert.com/2012/02/21/generating-random-non-uniform-data/

Там я обсуждаю, как превратить равномерное распределение в какое-то другое распределение, но, конечно, вы можете использовать аналогичные методы для преобразования других дистрибутивов.