Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   генерация чисел с неравномерным распределением (http://www.flasher.ru/forum/showthread.php?t=176350)

RaVeN-Nikma 08.03.2012 02:47

генерация чисел с неравномерным распределением
 
Вложений: 1
Задача: необходимо генерировать числа в диапазоне от 0 до 100, но чтобы числа стремящиеся к нулю, встречались чаще остальных. Чтобы было понятнее, накидал картинку и даже прикрепил.

П.С. Звучит просто, но на ночь глядя решение в голову не идет. Буду признателен за идеи или ссылки

fish_r 08.03.2012 03:08

Сначала генерируете число в диапазоне 1-20, затем 1-40, 1-60 и т.д.

Добавлено через 6 минут
Ну, имеется в виду, что когда диапазон закончился (100 ) начинаете сначала 1-20, 1-40 etc )

RaVeN-Nikma 08.03.2012 03:19

идея подходит, но в случае, если нужно повторить картинку. В моем случае мне надо сделать функцию, в которую подаешь 3 параметра (min, max, и сила притяжения к границы min), назад получить всего одну цифру

fish_r 08.03.2012 04:07

Что то в таком духе? Код не проверял, это просто концепция. Она вообще может давать с преобладанем к максимуму, но по-моему тяготение к максимуму вам как раз и нужно (судя по иллюстрации )

Код AS3:

        function gravityGenerator( max:int, min:int, grav:int ):Number
        {
            var rand:Number = min + ( Math.random() * ( max - min ) ) + 1;
 
            while( grav > 0 )
            {
                if ( rand >=  max / grav ) rand = gravityGenerator( max, min, grav-- );
            }
 
 
            return rand;
        }


ChuwY 08.03.2012 04:11

Вложений: 4
Почитайте про метод обратного преобразования.
Там же дается пример для экспоненциального распределения, которое вам как нельзя лучше подходит.

Функция (результат в приложении):
Код AS3:

private function exponentialRandom(lambda : Number):Number{
  var x : Number = Math.random();
  return -(1/lambda)*Math.log(1-x);
}


Вариант, адаптированный к вашим требованиям:
Код AS3:

private function ravenNikmaRandom(min : Number, max : Number, gravity : Number):Number{
  return min + exponentialRandom(gravity) % (max-min);
}


RaVeN-Nikma 08.03.2012 13:52

Именно, то что надо. Спасибо!


Часовой пояс GMT +4, время: 03:40.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.