【问题标题】:boost random in 2 dimensions二维随机提升
【发布时间】:2013-01-25 13:06:51
【问题描述】:

我正在尝试使用增强随机生成器来使随机点均匀分布在平面上。我有以下链接可以在一个维度上进行操作:

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

但就我而言,我希望在平面上以二维形式生成数字 float

是否有任何分布类型可以在二维中使用它? (我见过boost::uniform_on_sphere,但它是针对球面的。)

【问题讨论】:

    标签: boost random boost-random


    【解决方案1】:

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

    【讨论】:

    • 你的意思是这样声明一个用于 x 轴和另一个用于 y 轴: boost::uniform_01 for_x_axis (0,2); boost::uniform_01 for_y_axis (0,4);
    • 我的印象是 uniform_01 只会在间隔 [0,1) 中生成元素(这可能很重要!),所以你需要一个分布并将你得到的两个值相乘比例因子。您也不需要 Boost,在 C++11 中 <random> 中提供了一个非常相似的库。
    • std::uniform_real_distribution 确实需要两个参数。
    • 但我没听懂,你能给我举个例子吗?
    • 我认为他们只取最大和最小数量
    【解决方案2】:

    如果 x 遵循均匀分布 0 到 ay 遵循均匀分布 0 到 b,则点 (x, y) 均匀分布在矩形 (0,0)-(a,b) 上,无需任何特殊方法。只需生成两个随机数而不是一个。

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

    【讨论】:

    • 是不是像两个随机数,分别具有相同的类 boost::uniform_int?
    • 就像任意两个随机数一样,不管它们的生成算法是什么,只要它是一个均匀分布的算法。
    • 让我们考虑您分别在 x 和 y 轴上生成随机数。然后将这些值组合起来以在平面上形成许多点。如果我们这样做,独立的均匀分布就可以了。但合并后的不会是均匀分布的。很可能它会改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 2017-10-07
    • 2015-06-29
    • 1970-01-01
    • 2011-06-14
    • 2016-05-18
    • 2017-04-17
    相关资源
    最近更新 更多