我正在制作值噪声发生器,发现我当前的哈希值在图像中产生了一种模式:
因此,我正在寻找更好的,无法预测/重复的哈希函数。
我使用哈希而不是随机数,因为我希望它具有确定性。给定(x,y)坐标,它应始终产生相同的结果。
这也很好,但是如果可以扩展散列函数以轻松接受更多参数,例如(x,y,z)或(x,y,z,t),而不仅仅是两个,这不是强制性的。
我当前的哈希是:
public static class Hash
{
public static float GetHash(int x)
{
x = x ^ 61 ^ (x >> 16);
x += x << 3;
x ^= x >> 4;
x *= 0x27d4eb2d;
x ^= x >> 15;
return x / (float)int.MaxValue;
}
public static float GetHash(int x, int y) => GetHash((y << 8) + x);
}
我添加了行x / (float)int.MaxValue
,因为我希望浮点数从0到1。
但是我必须承认我只是从某个地方复制粘贴它。按位运算(和散列)不是我的强项。
我会使用https://github.com/Auburns/FastNoise_CSharp这样的库
也许您可以从该FastNoise.cs文件中的源代码中学习