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