expRandom.

Декабрь 12, 2007

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

Простой пример – Слот машина.
Бонусные символы должны выпадать гораздо реже обычных символов.
Существует масса способов реализовать такой рандом, о них, к примеру была речь на форуме flash-mx

Вот и мне тут понадобилась такая функция.

Некогда мною было написано некоторое количество игр для казино, все они быи завязаны на сервер, который нынче мертв. Жалко мне стало игрушек – красивые были, вот я сейчас и пишу аля-эмулятор сервера со всей логикой игры. Как раз тут вопрос и возник.
Более того мне необходимо, что бы числа возвращались в жестко заданном диапазоне.
Немного мозгового скрипа дало мне вот такую функцию.

function expoRandom(range:Number,w:Number):Number {
w = Math.max(w,1);
w = Math.min(w,709);
return Math.log(1+Math.random()*(Math.exp(w)-1))*(range/w);
}

В функцию передается два параметра – собственно диапазон, и, не знаю как это правильно обозвать, степень разброса. От это степени зависит насколько сильно выпадающие значения будут тесниться к максимальному краю. Чем больше степень, тем ближе к краю.

В функцию вставлена небольшая проверка – чтобы ширина не была меньше 1 (в этом случае мы получим обычный рандом) и не была больше 709 (в этом случае выражение Math.exp(w) даст нам infinity). Их собсвенно можно убрать, дабы не забивать процессор лишней работой.

Вся магия тут завязана на простой принцип – есть график логарифма. Мы берем случайное число по оси X и находим его логарифм по оси Y. Немного корректируем под наш диапазон – и результат на лице.

Вот к примеру такой:
http://bbexp.ru/blog/_stuff/random.html

_________
Блог переехал.
Комментарии оставлять здесь.

Entry Filed under: ActionScript, Math, fx. Метки: , .


Категории

Грабли Полезное анимация баг безопасность видео поток сознания 3D ActionScript AS2.0 AS3.0 flex fx Math news opensource text

Метки

Свежие записи

Top Posts

Flash

FLash3D

Календарь

Декабрь 2007
Пн Вт Ср Чт Пт Сб Вс
    Янв »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Архивы

RSS

Дружественные линки

Blog Stats

m e t a