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 ★★★ ()
Ответ на: комментарий от baverman

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Waterlaz ★★★★ ()

При чем тут вообще нормальное распределение?

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 ★★★ ()

ТС, скажи уже, сделал ты полиномом или нет?

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

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

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

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

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

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

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

Не там, где я пишу.

а что за платформа в которой нету rand_r ?

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

О Lazarus слышали?

это что-то про паскаль и дельфи ? в паскале кстати не запрещены вызовы libc

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

А зачем мне такие костыли, если можно сделать по-другому и в корне правильней?

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

AlexCones

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

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

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

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

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

В данном случае подключение целой библиотеки из-за одной функции - как раз таки костыль.

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

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

AlexCones ★★★ ()

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

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

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

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

cool-e-bin ()

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

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