Выбор случайных точек решетки в плоскости (x, y) - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь найти способ выбора случайных точек решетки в плоскости x, y.Предлагается использовать следующий код:

//////////////////////
// Pick random site //
////////////////////// 
int m=int(rand()*1.0/RAND_MAX*L*L);
int mx=m%L; //x coordinate of m site
int my=int(m*1.0/L); // y coordinate of m site

Другими словами: m - это случайное целое число от 0 до L^2.Координата x равна m mod L, это число от 0 до L.y устанавливается в качестве ближайшего целого числа к m/L, которое является целым числом от 0 до L.

Кажется, это работает, но в L^2 работает, мы с большей вероятностью будем искать одну часть системы x, y, чем другую?Может ли кто-нибудь объяснить, почему и существует ли альтернативный метод выбора случайных координатных точек на плоскости x, y, который равномерно выбирает пространство?

1 Ответ

0 голосов
/ 02 марта 2019

попытайтесь исследовать псевдогенератор Mersenne Twister , который доступен из C ++ 11.Надеюсь, что это вам поможет.

Также посмотрите здесь для документации.

Вот как вы можете использовать это для равномерного распределения:

    int ran_num(const int start, const int stop)
    {
        random_device rd;
        mt19937 mt(rd());
        uniform_int_distribution dist(start, stop);

        return dist(mt);
   }

Надеюсь, это как-то полезно!

...