在不包括子范围的范围内获得随机浮动
本文关键字:随机 范围内 不包括 范围 | 更新日期: 2023-09-27 18:22:08
如何获得一个范围内的随机浮点值,不包括子范围?到目前为止,我唯一的想法是创建两个范围,并从这两个范围中随机选择。我必须使用在unity3d引擎中找到的float Random.Range(float min, float max)
方法,所以代码将是:
float GetRandomNumber(float min, float max, float minExclusive, float maxExclusive)
{
float outcome;
if (Random.Range(0, 1) < 0.5f)
outcome = Random.Range(min, minExclusive);
else
outcome = Random.Range(maxExclusive, max);
return outcome;
}
我可以放心地假设min < minExclusive < maxExclusive < max
。
我试着在谷歌上搜索,但我发现的唯一类似的问题是整数,它们的行为有点不同(例如,你可以很容易地迭代它们):
- 生成排除范围的随机数
- 如何在一定范围内生成一个随机数,但排除一些
有人有更好的主意吗?
实现这一点的一种方法是生成忽略范围的随机数,然后适当地移动值。这应该确保在一组可接受的值上均匀分布(假设这是您想要的):
var excluded = maxExclusive - minExclusive;
var newMax = max - excluded;
var outcome = Random.Range(min, newMax);
return outcome > minExclusive ? outcome + excluded : outcome;