Равномерное распределение из фрактальной шумовой функции Перлина в C # - PullRequest
10 голосов
/ 04 марта 2012

Моя функция шума Перлина (которая складывает 6 октав трехмерного симплекса с постоянством 0,75) генерирует массив двумерных массивов double с.

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

Во всяком случае, это все детали.Дело в том, что здесь массив шумов 256 на 256:

enter image description here

Гистограмма с нормальным соответствием выглядит следующим образом:

enter image description here

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 04 марта 2012

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

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

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

2 голосов
/ 04 марта 2012

Возможно, вас заинтересует один из следующих (связанных) методов:

...