给定种子和某些参数,如何确定性地生成一个看似随机的数字?

How can I deterministically generate a seemingly random number given a seed and certain arguments?

我写了一个 Perlin 噪声发生器,但它依赖于一些非常不方便的东西:我必须预先生成一个随机向量网格。

理想情况下,我希望有一些函数 double f(int x, int y, int z, int seed)(或类似函数)在给定相同参数的情况下始终 return 一个相同的值,但其结果看起来足够随机以产生小的噪声x、y 和 z 的范围。然后,在我的噪声生成算法中,它可以动态生成一个 "random" 向量,而不是索引到预先计算的网格中。这样我就可以在仅受整数限制而不是内存限制的坐标处对噪声函数进行采样。

这可能吗?显然随机性不会像预先计算矢量那样高质量,但我只需要在视觉上看起来足够随机的东西。有没有现成的方法可以做到这一点?

这称为散列函数。有很多非常好的:对于您的使用,安全性比速度更重要,我会使用像 MD5 或 SHA1 这样的东西。