我正在使用
生成正方形上的坐标列表#include <random>
using namespace std;
int main(){
random_device rd;
long int seed = rd();
default_random_engine gen(seed);
double max=10.0, min=-10.0;
uniform_real_distribution<double> uni_real(min,max);
double random_x = uni_real(gen);
double random_y = uni_real(gen);
return 0;
}
我想确保任意两点之间的距离最小。对于我的用法,当应用周期性边界条件时,这必须成立。
<random>
库中的内置方法。有没有?O(n^2)
,因为我现在对效率并不太关心。除非,有一些简单的算法可以实现这一点。关于处理第三点或来自<random>
的其他环境的其他问题。
答案 0 :(得分:3)
虽然在math.stackexchange上讨论了这样的采样(相当于非重叠圆生成),但请参阅https://mathematica.stackexchange.com/questions/2594/efficient-way-to-generate-random-points-with-a-predefined-lower-bound-on-their-p和https://mathematica.stackexchange.com/questions/69649/generate-nonoverlapping-random-circles,我想指出另一个涉及准的另一种可能的解决方案 - 随机数。对于准随机Sobol序列,有一个陈述表明点之间的最小正距离等于0.5*sqrt(d)/N
,其中d
是问题的维度,N
是在超立方体中采样的点。该男子自己的论文http://www.sciencedirect.com/science/article/pii/S0378475406002382