我想在矩形上均匀地生成点(x,y)。首先你输入 minX 和 maxX 和 minY maxY 然后你统一生成 (x,y),下面显示的基本代码有没有更好的方法来实现它? (我需要用蒙特卡洛方法来画图)
#include <iostream>
#include <random>
double drand(const double min = 0., const double max = 1.)
{
return (max - min) * static_cast<double>(rand()) / static_cast<double> (RAND_MAX)+min;
}
int main(int argc, char **argv)
{
for(unsigned short int i=0;i<1000;++i)
{
std::cout << "x " << drand(minX, maxX) << std::endl;
std::cout << "y " << drand(0., maxY) << std::endl;
}
return 0;
}
最佳答案
您正在使用 rand()
。您的障碍并没有那么高,因为几乎任何东西 都比 rand()
好。既然你显然有 C++11,你为什么不使用 C++11 提供的更高级的随机数生成器?例如,
#include <random>
double drand(const double min = 0., const double max = 1.)
{
static std:: mt19937_64 mt_generator(std::random_device());
static std::uniform_real_distribution<double> u_0_1(0.0, 1.0);
return min + (max - min) * u_0_1(mt_generator);
}
关于c++ - 在矩形上均匀生成点(x,y),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20656129/