Archive for декабря 12, 2007

expRandom.

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

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

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

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

1
2
3
4
5
6
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

Popularity: 5% [?]

3 комментария декабря 12, 2007




МЕТА

Метки

2d 3D ActionScript adobe ae after effects animation animator_at_work AS2.0 AS3.0 astro bones bug bugfix debug deep linking draw drawing extension Flash flash CS4 flex fscommand fx html IK Math mindstream music-video NB opensource security swfaddress TextField traps uafpug useful utils video Новости анимация кинематика кости поток сознания туториал

Календарь

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

Архив

Ссылки

Радио