版本 3 将生成器移动到一个类中。这次我的新随机数生成技术正确吗?
template<typename T = int>
class MyRandomGenerator
{
public:
MyRandomGenerator()
{
std::random_device rd;
gen = std::mt19937{rd()};
}
T getNumber(const T& From, const T& To)
{
std::uniform_int_distribution<T> dist(From, To);
return dist(gen);
}
private:
std::mt19937 gen;
};
这是我的新位置计算器:
auto calculate_x_position = [&]() ->sf::Uint32 {return RandGen.getNumber(0, W - 1); };
auto calculate_y_position = [&]() ->sf::Uint32 {return RandGen.getNumber(0, H - 1); };
与以前相同的模式/问题:
版本 2 每秒创建约 3 张 map ,每张 map 10.000 颗星。结果还是一样。此外,更清楚的是 map 顶部有一个枢轴。示例:
原始问题: 我开始尝试绘制一个简单的星图。为此,我首先计算星星的 x 和 y 位置。 X和Y在窗口的宽度和高度范围内。
这是我的随机数生成函数:
template<typename T>
T getRandomNumberBetween(const T& Min, const T& Max)
{
static std::random_device rd;
static std::uniform_int_distribution<T> dist{Min, Max};
return dist(rd);
}
我是这样使用它的:
auto calculate_x_position = std::bind(inc::getRandomNumberBetween<sf::Uint32>, 0, Width-1);
auto calculate_y_position = std::bind(inc::getRandomNumberBetween<sf::Uint32>, 0, Height-1);
x = calculate_x_position(); //...
但是当我一遍又一遍地绘制我的 map 时,在我看来,大多数星星往往存在的地方都有一个支点。例如。大多数星星都在我窗口的上半部分。
例子:
我是不是用错了或有错误的期望?...因为here它说:
This distribution produces random integers in a range [a,b] where each possible value has an equal likelihood of being produced.
亲切的问候
最佳答案
均匀分布并不具体意味着你会在屏幕的每个象限中获得相同的数量;这意味着每个点出现的机会均等。所以如果你做一个简单的 50:50 试验,并不意味着你会得到 50:50 的结果。
但是,如果您对 1,000,000 颗星星进行了测试,很可能它们几乎是均匀分布的。对我来说,这似乎是样本量的错误
关于c++ - uniform_int_distribution 在这里用错了吗? (我的结果似乎分布不均),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29183501/