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

时间:2017-10-14 17:19:10

标签: c++ random

我想在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轴的区域中提供更密集的点。如何在域中选择密度相等的点?

1 个答案:

答案 0 :(得分:2)

请勿在功能的下半部分挤出相同数量/概率的点 而是在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);
}