我试图找到一种在 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
平面上选取随机坐标点?
最佳答案
尝试研究伪生成器Mersenne Twister ,可从 C++11 获得。 希望对您有所帮助。
另请参阅 here用于文档。
以下是如何使用它进行均匀分布:
int ran_num(const int start, const int stop)
{
random_device rd;
mt19937 mt(rd());
uniform_int_distribution dist(start, stop);
return dist(mt);
}
希望这对您有所帮助!
关于c++ - 在 (x,y) 平面中选取随机格点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54949980/