2013-01-25 29 views
2

我正在尝试使用增强随机生成器使随机点均匀分布在平面上。我有以下链接,在一个维度做:2维随机提升

在这里,他们用boost::uniform_int<>在一个单一的维度生成数字作为int

但在我的情况下,我希望在平面上以二维方式生成数字float

是否有任何分布类型可用于二维? (我见过boost::uniform_on_sphere,但是它是用于球形表面的。)

回答

0

使用uniform_01分布并生成两个随机数,给出x和y坐标。相应地缩放:)

+0

你的意思是像这样为x和y轴声明一个: boost :: uniform_01 <> for_x_axis(0,2); boost :: uniform_01 <> for_y_axis(0,4); –

+0

我的印象是'uniform_01'只会产生间隔'[0,1]'中的元素(这可能很重要!),所以你需要一个分布并乘以比例因子得到的两个值。您也不需要Boost,因此在''中的C++ 11中提供了一个类似的库。 – filmor

+0

'std :: uniform_real_distribution'确实需要两个参数。 – filmor

0

如果x如下均匀分布0至ay如下均匀分布0至b再分(x, y)被均匀地分布在矩形(0,0)-(a,b)没有任何特殊的方法。只需生成两个随机数而不是一个。

例如(当您谈论球体时),需要这些将它们以不同的方式分布在圆的边缘。

+0

是不是像两个随机数分别与相同的类boost :: uniform_int? –

+0

就像任何两个随机数一样,只要它是均匀分布算法,无论它们是哪一代算法。 – h22

+0

让我们考虑您分别在x轴和y轴上生成随机数。然后结合这些值在飞机上形成许多点。如果我们这样做,独立的统一分配将会很好。但是合并后的一个并不是统一分布的。它很可能会改变。 –