在为游戏生成树的上下文中考虑这段人造代码:
// Pretend there's some code somewhere that associates the 0-100 number to its corresponding size.
enum class TreeSize : uint32_t
{
Small, // 0-9
Medium, // 10-60
Large,// 61-90
ExtraLarge, // 91-100
};
// returns tree size
int GenerateTree()
{
std::random_device rd;
std::mt19937_64 mt(rd());
std::uniform_int_distribution<int32_t> dist(0, 100);
return dist(s_mt);
}
假设我想生成1000棵树,但要绑定到树大小的特定比率。例如:
- 小树:15%
- 中型树木:百分之三十
- 大树:百分之四十
- 特大型树木:15%
我该怎么做?**有现成的东西可以做到这一点吗?**这肯定是许多人以前不得不面对的问题,是吗?
2条答案
按热度按时间hi3rlvi21#
您需要的是
std::discrete_distribution
,其中可以分别为每个项目指定概率权重:c90pui9n2#
你可以用
std::piecewise_constant_distribution
生成一个指定分布的浮点数,但是注意你应该保留mt对象,而不是每次都重新初始化它。Here's a live example of how to use this.