我想在 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/

10-12 06:07