LINUX.ORG.RU

Ф-я нормального распределения для двух переменных.


0

1

Собственно есть (цель - создать такую функцию) некая F(x,y), необходимо, чтобы она возвращала целочисленные значения от 0 до 15. Только два требования - менее 10 простейших операций для вычисления и приблизительно одинаковая частотность для выходных чисел. Очень желательно, чтобы в радиусе ~2 от неких x,y не было одинаковых чисел.

В какую сторону копать?

P.S. X и Y только целые положительные. Верхняя граница ~100 000.

Ничего не понял. Если речь за нормальное распределение, то у него есть матожидание и дисперсия. Если F(x,y) это двумерное нормальное распределение, для которого известно матожидание и дисперсия, то для него есть аналитическое выражение.

Вам то чего вообще надо??? Источник случ чисел с нормальным распределением?

AIv ★★★★★
()
Ответ на: комментарий от AIv

Присоединяюсь. Какой-то бессвязный набор слов.

Miguel ★★★★★
()
Ответ на: комментарий от baverman

Тьфу на него...

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

AIv ★★★★★
()
Ответ на: комментарий от AIv

Источник случ чисел с нормальным распределением?

Ок, скажу другими словами: нужен рендом-генератор с сидом от двух чисел. Который будет выдавать значения от 0 до 15, которые будут появляться примерно с равными частотами.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

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

baverman ★★★
()
Ответ на: комментарий от baverman

Ок, задача. Существует некое игровое поле, блоки которого описаны в файле. Про них сказан лишь тип блока (земля\воздух и пр.). Существует 16 разновидностей текстур для того, чтобы не было одномонотонных поверхностей. Задача - разместить текстуры так, чтобы при следующей генерации они распределились точно так же. ИМХО надо по координатам, т.е. F(x, y) = [0,1, .. , 14, 15].

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

>У полиномов проблема в том, что нельзя ограничить выход от 0 до 15 при любых значениях ввода.

Как это нельзя? Бери по модулю 16 и вот тебе можно.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

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

unC0Rr ★★★★★
()
Ответ на: комментарий от AlexCones

Вот тебе кстати и неплохой полином:

f(x, y) = (x*x + 2*y*y + 2*x + 5*y) mod 16

Гарантирована соседние по вертикале или горизонтале не будут одинаковыми.

И вообще:

f(x, y) = (a*x^2 + b*y^2 + 2*c*x*y + d*x + e*y) mod 16

если a+d не делится на 2 и усли b+e не делится на 2, то соседние по вертикале и по горизонтале не совпадают

Waterlaz ★★★★★
()
Ответ на: комментарий от AlexCones

- разместить текстуры так, чтобы при следующей генерации они распределились точно так же

вы не поверите, стандартный rand, random (или что там в вашем любимом языке) абсолютно детерминирован. Если при следующей генерации задать тот-же seed, то и все текстуры будут теми-же..

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

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

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

>Рендом трогать нельзя - он генерирует ландшафт. А сменив его сид для генерации распределения текстур уже очень и очень будет геморройно вернуться к построению ландшафта.

Эм... ну реализуй свой рандом или возьми готовый с возможностью задавать seed

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Пока нет. Завтра куплю мышку и сделаю.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

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

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

MKuznetsov ★★★★★
()
Ответ на: комментарий от AlexCones

AlexCones

примерно с равными частотами.

Эм.. Это же равномерное распределение, а не нормальное, не?

do0dlez ★★
()
Ответ на: комментарий от AlexCones

Использование библиотечных функций - не костыль. Шуструю реализацию рандома можешь посмотреть в исходниках hedgewars.

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

Нет. Из всех модулей у меня подключена только Windows и мой модуль импорта моего фреймворка.

AlexCones ★★★
() автор топика

Дональд Кнут искусство программирования, том 2 там всё написано

Линейный конгруэнтный метод используй его

anonymous
()
Ответ на: комментарий от anonymous

вообще то, ТС-у нужна простая хеш-функция. А это не 2-й том, а 3-й. Но и поиска в википедии я думаю вполне хватит.

cool-e-bin
()

Извините, а стандартный rnd() или как он там у вас - не катит? В детстве рисовал на qbasic «звёздное небо» и прочие подобные штуковины. Я мозгом понимаю, что это псевдорэндом т.е. просто хитрая функция от определённого значения, но блин... Картинка всякий раз получалась разная и всегда была без явных «неоднородностей».

dj_slack
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.