C++ 中曲线下的 2D 随机点

2D random points under a curve in c++

本文关键字:2D 随机 曲线 C++      更新时间:2023-10-16

我想在 x 轴和曲线之间选择 50 个随机点 y=sin (x)+2(例如)。我希望随机点均匀分布在这个 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 轴上太高的内容。

即用这个替换你的循环:

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);
}