二维噪声生成的参数随机函数

Jam*_*pse 4 java random procedural 2d function

我试图产生无限的随机地形.给定相同的种子时,地形应该每次都生成相同的结果.

我尝试使用Java的Random函数,使用地形网格上给定节点的x和y坐标的各种函数创建种子.如x*y + x + y +种子,20*x + 30*y等.

这种方法的问题在于我总是在生成的数字中看到清晰的模式.

基本上我想要的是:f(x,y)=随机数

如果上面的函数可以包含某种种子,那就更有用了:f(x,y,seed)=随机数

我需要为每个x,y组合生成几个数字,但是一旦我具有上述功能,它应该很容易得到额外的数字.这些将用于指定地形的高度,以及将呈现什么特征(建筑物,树木).

请不要提及Perlin Noise或其他此类方法.我的问题不是让噪音看起来不错,而是可靠的"随机"噪音.

谢谢,杰米.

Pio*_*zmo 5

您正在寻找散列函数.尝试其中之一:

http://www.concentric.net/~ttwang/tech/inthash.htm

以下是示例用法:

int hash32shift(int key)
{
  key = ~key + (key << 15); // key = (key << 15) - key - 1;
  key = key ^ (key >>> 12);
  key = key + (key << 2);
  key = key ^ (key >>> 4);
  key = key * 2057; // key = (key + (key << 3)) + (key << 11);
  key = key ^ (key >>> 16);
  return key;
}

int noise(int x, int y, int seed)
{
    return hash32shift(seed+hash32shift(x+hash32shift(y)));
}
Run Code Online (Sandbox Code Playgroud)

而且,它看起来像这样:

噪声