我想在 x 轴和曲线 y=sin (x)+2 (例如)之间选择 50 个随机点。我希望随机点在这个 2D 区域中均匀分布。我是这样的:
using namespace std;
double randnum (double aa, double bb) //defining a function to create random numbers
{
static std::default_random_engine generator;
std::uniform_real_distribution<double> distribution (aa,bb);
return distribution(generator);
}
for(int i = 0; i < 50; i++)
{
x[i] = randnum(0,2 * M_PIl);
y[i] = randnum(0,sin(x[i])+2);
}
但它是不正确的,因为它在曲线更靠近 x 轴的区域给出了更密集的点。如何选择域中密度相等的点?
最佳答案
不要在函数的下部挤压相同数量/概率的点。
而是在 x 范围内的矩形区域中创建随机点,直到最大 y。
但是忽略那些在 y 轴上太高的。
IE。用这个替换你的循环:
for(int i = 0; i < 50; i++)
{
do
{ x[i] = randnum(0,2 * M_PIl);
y[i] = randnum(0,3); // three is max-y, but not really relevant
} while (y[i]>=sin(x[i])+2);
}
关于c++ - C++中曲线下的二维随机点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46747296/