public float randomNumber(float x, float y, Random rnd)
{
//Return a random number between 0 - 1
}
所以我的问题是我需要随机数与x和y相关。如果我传入x = 10,y = 5,当我传入x = 10时,我得到0.34567f,第二次y = 5,我再次需要0.34567f的结果。有谁知道这样做的方法?
编辑:根据以下回复,我意识到我遗漏了一些东西。我传递Random对象的原因是因为它已在其他地方预先播种。因此,如果我传入x = 10,y = 5表示种子为50的随机对象,并且使用种子为51的Random对象做同样的事情应该给我一些不同的东西。
答案 0 :(得分:3)
您可以将它们用作种子:
int seed =
BitConverter.ToInt32(BitConverter.GetBytes(
x * 17 + y
));
new Random(seed).NextDouble();
答案 1 :(得分:2)
使用x和y作为种子值
public float RandomNumber(float x, float y)
{
var rnd = new Random(x.GetHashCode() ^ y.GetHashCode());
return (float)rnd.NextDouble();
}
注意:^
运算符对x和y的位执行XOR运算。
更新(响应SLaks,Servy和Scott Chamberlain的评论)
您的“随机数”根本不是随机数。您可能需要的是哈希码
public Hash(float x, float y)
{
unchecked {
return Math.Abs((527 + x) * 31 + y) % 1.0f;
}
}
答案 2 :(得分:1)
看起来你真正需要的是哈希,而不是随机数。如果您需要基于两个浮点数的序列随机数,那么我建议使用这两个浮点数来制作种子,但是当您只想要一个效率低得多的单个值时,也不会哈希特别棒。你可以尝试这样的事情。
public float GetHashCode(float x, float y)
{
float somePrimeNumber = 17.0
return Math.Abs(1.0 / (x.GetHashCode() * somePrimeNumber + y.GetHashCode() + 1));
}